From 912e73ce18cf21f2ec7c636b52bfe4e3fe59b505 Mon Sep 17 00:00:00 2001 From: netpoe Date: Wed, 17 Apr 2024 11:38:00 -0600 Subject: [PATCH] feat: LarsKristoHellheadsContextController WIP --- app/.eslintrc.js | 1 + app/package.json | 3 +- .../LarskristoHellheadsContext.tsx | 5 + .../LarskristoHellheadsContext.types.ts | 22 + .../LarskristoHellheadsContextController.tsx | 65 +++ .../useLarskristoHellheadsContext.tsx | 13 + app/src/providers/evm/client.ts | 9 + .../LarsKristoHellheads.ts | 268 +++++++++ .../LarsKristoHellheads__factory.ts | 517 ++++++++++++++++++ app/src/providers/evm/index.ts | 5 + .../LarsKristoHellheads.tsx | 4 +- app/yarn.lock | 17 +- 12 files changed, 922 insertions(+), 7 deletions(-) create mode 100644 app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.tsx create mode 100644 app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts create mode 100644 app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx create mode 100644 app/src/context/evm/larskristo-hellheads/useLarskristoHellheadsContext.tsx create mode 100644 app/src/providers/evm/client.ts create mode 100644 app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts create mode 100644 app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts create mode 100644 app/src/providers/evm/index.ts diff --git a/app/.eslintrc.js b/app/.eslintrc.js index 8790b6a9..85c3e14e 100644 --- a/app/.eslintrc.js +++ b/app/.eslintrc.js @@ -169,6 +169,7 @@ module.exports = { "unicorn/no-array-reduce": "off", "unicorn/consistent-destructuring": "off", "unicorn/no-array-for-each": "off", + "unicorn/no-abusive-eslint-disable": "off", // a11y "jsx-a11y/anchor-is-valid": "off", diff --git a/app/package.json b/app/package.json index 144a51e3..f47b5da0 100644 --- a/app/package.json +++ b/app/package.json @@ -21,6 +21,7 @@ "@supabase/supabase-js": "^2.33.1", "@tanstack/react-query": "^5.29.0", "@types/js-cookie": "^3.0.3", + "@wagmi/core": "^2.6.17", "@web3modal/siwe": "^4.1.5", "@web3modal/wagmi": "^4.1.5", "ag-grid-community": "^27.3.0", @@ -49,7 +50,7 @@ "rxjs": "^7.8.1", "siwe": "^2.1.4", "uuid": "^9.0.0", - "viem": "^2.9.13", + "viem": "^2.9.20", "wagmi": "^2.5.19", "winston": "^3.9.0", "ws": "^8.13.0" diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.tsx b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.tsx new file mode 100644 index 00000000..98b03926 --- /dev/null +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.tsx @@ -0,0 +1,5 @@ +import { createContext } from "react"; + +import { LarskristoHellheadsContextType } from "./LarskristoHellheadsContext.types"; + +export const LarskristoHellheadsContext = createContext(undefined); diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts new file mode 100644 index 00000000..f83adc2f --- /dev/null +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContext.types.ts @@ -0,0 +1,22 @@ +import { ReactNode } from "react"; + +import { LarsKristoHellheads } from "providers/evm/contracts/larskristohellheads/LarsKristoHellheads"; + +export type LarskristoHellheadsContextControllerProps = { + children: ReactNode; +}; + +export type LarskristoHellheadsContextActions = { + fetchContractValues: { isLoading: boolean }; +}; + +export type LarskristoHellheadsContractValues = { + name: LarsKristoHellheads["name"]; + symbol: LarsKristoHellheads["symbol"]; +}; + +export type LarskristoHellheadsContextType = { + contractValues?: LarskristoHellheadsContractValues; + actions: LarskristoHellheadsContextActions; + fetchContractValues: (address: string) => Promise; +}; diff --git a/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx new file mode 100644 index 00000000..496b10b5 --- /dev/null +++ b/app/src/context/evm/larskristo-hellheads/LarskristoHellheadsContextController.tsx @@ -0,0 +1,65 @@ +import React, { useState } from "react"; +import { getContract } from "viem"; + +import { LarsKristoHellheads__factory } from "providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory"; +import evm from "providers/evm"; + +import { LarskristoHellheadsContext } from "./LarskristoHellheadsContext"; +import { + LarskristoHellheadsContextActions, + LarskristoHellheadsContextControllerProps, + LarskristoHellheadsContextType, + LarskristoHellheadsContractValues, +} from "./LarskristoHellheadsContext.types"; + +export const LarskristoHellheadsContextController = ({ children }: LarskristoHellheadsContextControllerProps) => { + const [contractValues, setContractValues] = useState(); + const [actions, setActions] = useState({ + fetchContractValues: { + isLoading: false, + }, + }); + + const fetchContractValues = async (address: string) => { + setActions((prev) => ({ + ...prev, + fetchContractValues: { + isLoading: true, + }, + })); + + try { + const contract = getContract({ + address: address as `0x{string}`, + abi: LarsKristoHellheads__factory.abi, + client: evm.client, + }); + + const [name, symbol] = await Promise.all([contract.read.name(), contract.read.symbol()]); + + const values: LarskristoHellheadsContractValues = { + name, + symbol, + }; + + setContractValues({ ...values }); + } catch (error) { + console.error(error); + } + + setActions((prev) => ({ + ...prev, + fetchContractValues: { + isLoading: false, + }, + })); + }; + + const props: LarskristoHellheadsContextType = { + fetchContractValues, + contractValues, + actions, + }; + + return {children}; +}; diff --git a/app/src/context/evm/larskristo-hellheads/useLarskristoHellheadsContext.tsx b/app/src/context/evm/larskristo-hellheads/useLarskristoHellheadsContext.tsx new file mode 100644 index 00000000..06dd6801 --- /dev/null +++ b/app/src/context/evm/larskristo-hellheads/useLarskristoHellheadsContext.tsx @@ -0,0 +1,13 @@ +import { useContext } from "react"; + +import { LarskristoHellheadsContext } from "./LarskristoHellheadsContext"; + +export const useLarskristoHellheadsContext = () => { + const context = useContext(LarskristoHellheadsContext); + + if (context === undefined) { + throw new Error("useLarskristoHellheadsContext must be used within a LarskristoHellheadsContext"); + } + + return context; +}; diff --git a/app/src/providers/evm/client.ts b/app/src/providers/evm/client.ts new file mode 100644 index 00000000..c29d9a2c --- /dev/null +++ b/app/src/providers/evm/client.ts @@ -0,0 +1,9 @@ +import { createWalletClient, http } from "viem"; +import { sepolia } from "viem/chains"; + +const client = createWalletClient({ + chain: sepolia, + transport: http(), +}); + +export default client; diff --git a/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts new file mode 100644 index 00000000..586d7739 --- /dev/null +++ b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads.ts @@ -0,0 +1,268 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumberish, + BytesLike, + FunctionFragment, + Result, + Interface, + EventFragment, + AddressLike, + ContractRunner, + ContractMethod, + Listener, +} from "ethers"; +import type { + TypedContractEvent, + TypedDeferredTopicFilter, + TypedEventLog, + TypedLogDescription, + TypedListener, + TypedContractMethod, +} from "../common"; + +export interface LarsKristoHellheadsInterface extends Interface { + getFunction( + nameOrSignature: + | "approve" + | "balanceOf" + | "getApproved" + | "isApprovedForAll" + | "name" + | "owner" + | "ownerOf" + | "safeTransferFrom(address,address,uint256)" + | "safeTransferFrom(address,address,uint256,bytes)" + | "setApprovalForAll" + | "supportsInterface" + | "symbol" + | "tokenURI" + | "transferFrom", + ): FunctionFragment; + + getEvent(nameOrSignatureOrTopic: "Approval" | "ApprovalForAll" | "Transfer"): EventFragment; + + encodeFunctionData(functionFragment: "approve", values: [AddressLike, BigNumberish]): string; + encodeFunctionData(functionFragment: "balanceOf", values: [AddressLike]): string; + encodeFunctionData(functionFragment: "getApproved", values: [BigNumberish]): string; + encodeFunctionData(functionFragment: "isApprovedForAll", values: [AddressLike, AddressLike]): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData(functionFragment: "ownerOf", values: [BigNumberish]): string; + encodeFunctionData( + functionFragment: "safeTransferFrom(address,address,uint256)", + values: [AddressLike, AddressLike, BigNumberish], + ): string; + encodeFunctionData( + functionFragment: "safeTransferFrom(address,address,uint256,bytes)", + values: [AddressLike, AddressLike, BigNumberish, BytesLike], + ): string; + encodeFunctionData(functionFragment: "setApprovalForAll", values: [AddressLike, boolean]): string; + encodeFunctionData(functionFragment: "supportsInterface", values: [BytesLike]): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "tokenURI", values: [BigNumberish]): string; + encodeFunctionData(functionFragment: "transferFrom", values: [AddressLike, AddressLike, BigNumberish]): string; + + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getApproved", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "isApprovedForAll", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "safeTransferFrom(address,address,uint256)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "safeTransferFrom(address,address,uint256,bytes)", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "setApprovalForAll", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "supportsInterface", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "tokenURI", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "transferFrom", data: BytesLike): Result; +} + +export namespace ApprovalEvent { + export type InputTuple = [owner: AddressLike, approved: AddressLike, tokenId: BigNumberish]; + export type OutputTuple = [owner: string, approved: string, tokenId: bigint]; + export interface OutputObject { + owner: string; + approved: string; + tokenId: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace ApprovalForAllEvent { + export type InputTuple = [owner: AddressLike, operator: AddressLike, approved: boolean]; + export type OutputTuple = [owner: string, operator: string, approved: boolean]; + export interface OutputObject { + owner: string; + operator: string; + approved: boolean; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export namespace TransferEvent { + export type InputTuple = [from: AddressLike, to: AddressLike, tokenId: BigNumberish]; + export type OutputTuple = [from: string, to: string, tokenId: bigint]; + export interface OutputObject { + from: string; + to: string; + tokenId: bigint; + } + export type Event = TypedContractEvent; + export type Filter = TypedDeferredTopicFilter; + export type Log = TypedEventLog; + export type LogDescription = TypedLogDescription; +} + +export interface LarsKristoHellheads extends BaseContract { + connect(runner?: ContractRunner | null): LarsKristoHellheads; + waitForDeployment(): Promise; + + interface: LarsKristoHellheadsInterface; + + queryFilter( + event: TCEvent, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined, + ): Promise>>; + queryFilter( + filter: TypedDeferredTopicFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined, + ): Promise>>; + + on(event: TCEvent, listener: TypedListener): Promise; + on( + filter: TypedDeferredTopicFilter, + listener: TypedListener, + ): Promise; + + once(event: TCEvent, listener: TypedListener): Promise; + once( + filter: TypedDeferredTopicFilter, + listener: TypedListener, + ): Promise; + + listeners(event: TCEvent): Promise>>; + listeners(eventName?: string): Promise>; + removeAllListeners(event?: TCEvent): Promise; + + approve: TypedContractMethod<[to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; + + balanceOf: TypedContractMethod<[owner: AddressLike], [bigint], "view">; + + getApproved: TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + + isApprovedForAll: TypedContractMethod<[owner: AddressLike, operator: AddressLike], [boolean], "view">; + + name: TypedContractMethod<[], [string], "view">; + + owner: TypedContractMethod<[], [string], "view">; + + ownerOf: TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + + "safeTransferFrom(address,address,uint256)": TypedContractMethod< + [from: AddressLike, to: AddressLike, tokenId: BigNumberish], + [void], + "nonpayable" + >; + + "safeTransferFrom(address,address,uint256,bytes)": TypedContractMethod< + [from: AddressLike, to: AddressLike, tokenId: BigNumberish, data: BytesLike], + [void], + "nonpayable" + >; + + setApprovalForAll: TypedContractMethod<[operator: AddressLike, approved: boolean], [void], "nonpayable">; + + supportsInterface: TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; + + symbol: TypedContractMethod<[], [string], "view">; + + tokenURI: TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + + transferFrom: TypedContractMethod<[from: AddressLike, to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; + + getFunction(key: string | FunctionFragment): T; + + getFunction( + nameOrSignature: "approve", + ): TypedContractMethod<[to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; + getFunction(nameOrSignature: "balanceOf"): TypedContractMethod<[owner: AddressLike], [bigint], "view">; + getFunction(nameOrSignature: "getApproved"): TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + getFunction( + nameOrSignature: "isApprovedForAll", + ): TypedContractMethod<[owner: AddressLike, operator: AddressLike], [boolean], "view">; + getFunction(nameOrSignature: "name"): TypedContractMethod<[], [string], "view">; + getFunction(nameOrSignature: "owner"): TypedContractMethod<[], [string], "view">; + getFunction(nameOrSignature: "ownerOf"): TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + getFunction( + nameOrSignature: "safeTransferFrom(address,address,uint256)", + ): TypedContractMethod<[from: AddressLike, to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; + getFunction( + nameOrSignature: "safeTransferFrom(address,address,uint256,bytes)", + ): TypedContractMethod< + [from: AddressLike, to: AddressLike, tokenId: BigNumberish, data: BytesLike], + [void], + "nonpayable" + >; + getFunction( + nameOrSignature: "setApprovalForAll", + ): TypedContractMethod<[operator: AddressLike, approved: boolean], [void], "nonpayable">; + getFunction(nameOrSignature: "supportsInterface"): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">; + getFunction(nameOrSignature: "symbol"): TypedContractMethod<[], [string], "view">; + getFunction(nameOrSignature: "tokenURI"): TypedContractMethod<[tokenId: BigNumberish], [string], "view">; + getFunction( + nameOrSignature: "transferFrom", + ): TypedContractMethod<[from: AddressLike, to: AddressLike, tokenId: BigNumberish], [void], "nonpayable">; + + getEvent( + key: "Approval", + ): TypedContractEvent; + getEvent( + key: "ApprovalForAll", + ): TypedContractEvent< + ApprovalForAllEvent.InputTuple, + ApprovalForAllEvent.OutputTuple, + ApprovalForAllEvent.OutputObject + >; + getEvent( + key: "Transfer", + ): TypedContractEvent; + + filters: { + "Approval(address,address,uint256)": TypedContractEvent< + ApprovalEvent.InputTuple, + ApprovalEvent.OutputTuple, + ApprovalEvent.OutputObject + >; + Approval: TypedContractEvent; + + "ApprovalForAll(address,address,bool)": TypedContractEvent< + ApprovalForAllEvent.InputTuple, + ApprovalForAllEvent.OutputTuple, + ApprovalForAllEvent.OutputObject + >; + ApprovalForAll: TypedContractEvent< + ApprovalForAllEvent.InputTuple, + ApprovalForAllEvent.OutputTuple, + ApprovalForAllEvent.OutputObject + >; + + "Transfer(address,address,uint256)": TypedContractEvent< + TransferEvent.InputTuple, + TransferEvent.OutputTuple, + TransferEvent.OutputObject + >; + Transfer: TypedContractEvent; + }; +} diff --git a/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts new file mode 100644 index 00000000..428f0efa --- /dev/null +++ b/app/src/providers/evm/contracts/larskristohellheads/LarsKristoHellheads__factory.ts @@ -0,0 +1,517 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Contract, ContractFactory, ContractTransactionResponse, Interface } from "ethers"; +import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; +import type { NonPayableOverrides } from "../../common"; +import type { LarsKristoHellheads, LarsKristoHellheadsInterface } from "../../contracts/LarsKristoHellheads"; + +const _abi = [ + { + inputs: [ + { + internalType: "string", + name: "name_", + type: "string", + }, + { + internalType: "string", + name: "symbol_", + type: "string", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + 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", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "approved", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "Approval", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "operator", + type: "address", + }, + { + indexed: false, + internalType: "bool", + name: "approved", + type: "bool", + }, + ], + name: "ApprovalForAll", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "Transfer", + type: "event", + }, + { + inputs: [ + { + 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: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "getApproved", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "operator", + type: "address", + }, + ], + name: "isApprovedForAll", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "name", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "ownerOf", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "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: "bytes4", + name: "interfaceId", + type: "bytes4", + }, + ], + name: "supportsInterface", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + ], + name: "tokenURI", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + 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", + }, +] as const; + +const _bytecode = + "0x6080604052739921dc045d0890788fb174a14d93bbc46d449363600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180611b2001604052806040518060600160405280602e815260200162004d17602e913981526020016040518060600160405280602e815260200162005c5d602e913981526020016040518060600160405280602e81526020016200707d602e913981526020016040518060600160405280602e815260200162005eb3602e913981526020016040518060600160405280602e815260200162006445602e913981526020016040518060600160405280602e8152602001620061ef602e913981526020016040518060600160405280602e815260200162005755602e913981526020016040518060600160405280602e815260200162006867602e913981526020016040518060600160405280602e815260200162006b75602e913981526020016040518060600160405280602e815260200162005f99602e913981526020016040518060600160405280602e8152602001620061c1602e913981526020016040518060600160405280602e815260200162005ce7602e913981526020016040518060600160405280602e815260200162006a33602e913981526020016040518060600160405280602e8152602001620060db602e913981526020016040518060600160405280602e815260200162006587602e913981526020016040518060600160405280602e8152602001620066c9602e913981526020016040518060600160405280602e815260200162006e83602e913981526020016040518060600160405280602e815260200162006abd602e913981526020016040518060600160405280602e815260200162005b1b602e913981526020016040518060600160405280602e815260200162005e57602e913981526020016040518060600160405280602e815260200162004c8d602e913981526020016040518060600160405280602e815260200162005a07602e913981526020016040518060600160405280602e815260200162006bff602e913981526020016040518060600160405280602e815260200162006473602e913981526020016040518060600160405280602e8152602001620067af602e913981526020016040518060600160405280602e815260200162006331602e913981526020016040518060600160405280602e815260200162006109602e913981526020016040518060600160405280602e815260200162005a63602e913981526020016040518060600160405280602e8152602001620056f9602e913981526020016040518060600160405280602e8152602001620058c5602e913981526020016040518060600160405280602e815260200162005ba5602e913981526020016040518060600160405280602e8152602001620050af602e913981526020016040518060600160405280602e815260200162004aef602e913981526020016040518060600160405280602e8152602001620065b5602e913981526020016040518060600160405280602e815260200162004a37602e913981526020016040518060600160405280602e815260200162006611602e913981526020016040518060600160405280602e815260200162006c89602e913981526020016040518060600160405280602e815260200162004b4b602e913981526020016040518060600160405280602e815260200162005b49602e913981526020016040518060600160405280602e815260200162006e27602e913981526020016040518060600160405280602e815260200162005f3d602e913981526020016040518060600160405280602e815260200162005419602e913981526020016040518060600160405280602e8152602001620054ff602e913981526020016040518060600160405280602e81526020016200521f602e913981526020016040518060600160405280602e815260200162006d6f602e913981526020016040518060600160405280602e8152602001620060ad602e913981526020016040518060600160405280602e81526020016200652b602e913981526020016040518060600160405280602e8152602001620068c3602e913981526020016040518060600160405280602e815260200162007021602e913981526020016040518060600160405280602e815260200162006a61602e913981526020016040518060600160405280602e815260200162006193602e913981526020016040518060600160405280602e815260200162004dcf602e913981526020016040518060600160405280602e815260200162004fc9602e913981526020016040518060600160405280602e815260200162005e29602e913981526020016040518060600160405280602e81526020016200697b602e913981526020016040518060600160405280602e8152602001620052a9602e913981526020016040518060600160405280602e815260200162005641602e913981526020016040518060600160405280602e815260200162004a09602e913981526020016040518060600160405280602e81526020016200524d602e913981526020016040518060600160405280602e815260200162005447602e913981526020016040518060600160405280602e815260200162005b77602e913981526020016040518060600160405280602e815260200162006dcb602e913981526020016040518060600160405280602e815260200162006b47602e913981526020016040518060600160405280602e815260200162005139602e913981526020016040518060600160405280602e815260200162004f6d602e913981526020016040518060600160405280602e815260200162005333602e913981526020016040518060600160405280602e815260200162004e87602e913981526020016040518060600160405280602e815260200162004ba7602e913981526020016040518060600160405280602e815260200162004e2b602e913981526020016040518060600160405280602e8152602001620050dd602e913981526020016040518060600160405280602e8152602001620058f3602e913981526020016040518060600160405280602e815260200162006fc5602e913981526020016040518060600160405280602e815260200162005053602e913981526020016040518060600160405280602e815260200162005025602e913981526020016040518060600160405280602e8152602001620053bd602e913981526020016040518060600160405280602e81526020016200597d602e913981526020016040518060600160405280602e815260200162006279602e913981526020016040518060600160405280602e815260200162006f0d602e913981526020016040518060600160405280602e815260200162006f3b602e913981526020016040518060600160405280602e81526020016200607f602e913981526020016040518060600160405280602e8152602001620064cf602e913981526020016040518060600160405280602e815260200162004b1d602e913981526020016040518060600160405280602e815260200162005613602e913981526020016040518060600160405280602e815260200162006d9d602e913981526020016040518060600160405280602e815260200162006c5b602e913981526020016040518060600160405280602e81526020016200624b602e913981526020016040518060600160405280602e81526020016200555b602e913981526020016040518060600160405280602e81526020016200666d602e913981526020016040518060600160405280602e81526020016200510b602e913981526020016040518060600160405280602e815260200162005361602e913981526020016040518060600160405280602e815260200162006839602e913981526020016040518060600160405280602e8152602001620063e9602e913981526020016040518060600160405280602e8152602001620067dd602e913981526020016040518060600160405280602e81526020016200691f602e913981526020016040518060600160405280602e8152602001620051f1602e913981526020016040518060600160405280602e8152602001620052d7602e913981526020016040518060600160405280602e815260200162006bd1602e913981526020016040518060600160405280602e815260200162005ff5602e913981526020016040518060600160405280602e8152602001620051c3602e913981526020016040518060600160405280602e815260200162005c2f602e913981526020016040518060600160405280602e8152602001620057b1602e913981526020016040518060600160405280602e815260200162005ee1602e913981526020016040518060600160405280602e8152602001620055e5602e913981526020016040518060600160405280602e815260200162005783602e913981526020016040518060600160405280602e81526020016200663f602e913981526020016040518060600160405280602e815260200162006023602e913981526020016040518060600160405280602e815260200162005d43602e913981526020016040518060600160405280602e8152602001620064fd602e913981526020016040518060600160405280602e815260200162006f97602e913981526020016040518060600160405280602e8152602001620057df602e913981526020016040518060600160405280602e815260200162005869602e913981526020016040518060600160405280602e815260200162004c31602e913981526020016040518060600160405280602e815260200162005f6b602e913981526020016040518060600160405280602e81526020016200621d602e913981526020016040518060600160405280602e815260200162005dcd602e913981526020016040518060600160405280602e815260200162006559602e913981526020016040518060600160405280602e815260200162006edf602e913981526020016040518060600160405280602e815260200162004ce9602e913981526020016040518060600160405280602e815260200162006137602e913981526020016040518060600160405280602e815260200162005475602e913981526020016040518060600160405280602e815260200162004f3f602e913981526020016040518060600160405280602e8152602001620053eb602e913981526020016040518060600160405280602e81526020016200569d602e913981526020016040518060600160405280602e815260200162005cb9602e913981526020016040518060600160405280602e81526020016200538f602e913981526020016040518060600160405280602e81526020016200694d602e913981526020016040518060600160405280602e815260200162006a8f602e913981526020016040518060600160405280602e815260200162005589602e913981526020016040518060600160405280602e815260200162006ba3602e913981526020016040518060600160405280602e815260200162006d41602e913981526020016040518060600160405280602e81526020016200635f602e913981526020016040518060600160405280602e815260200162006303602e913981526020016040518060600160405280602e81526020016200594f602e913981526020016040518060600160405280602e81526020016200680b602e913981526020016040518060600160405280602e815260200162005d15602e913981526020016040518060600160405280602e81526020016200704f602e913981526020016040518060600160405280602e815260200162004f11602e913981526020016040518060600160405280602e8152602001620069d7602e913981526020016040518060600160405280602e815260200162006725602e913981526020016040518060600160405280602e81526020016200552d602e913981526020016040518060600160405280602e815260200162006417602e913981526020016040518060600160405280602e815260200162005a35602e913981526020016040518060600160405280602e815260200162005195602e913981526020016040518060600160405280602e815260200162006ce5602e913981526020016040518060600160405280602e815260200162005c01602e913981526020016040518060600160405280602e815260200162006f69602e913981526020016040518060600160405280602e815260200162006aeb602e913981526020016040518060600160405280602e8152602001620065e3602e913981526020016040518060600160405280602e815260200162005167602e913981526020016040518060600160405280602e8152602001620059d9602e913981526020016040518060600160405280602e8152602001620066f7602e913981526020016040518060600160405280602e815260200162006753602e913981526020016040518060600160405280602e8152602001620068f1602e913981526020016040518060600160405280602e8152602001620070ab602e913981526020016040518060600160405280602e815260200162006cb7602e913981526020016040518060600160405280602e8152602001620054a3602e913981526020016040518060600160405280602e815260200162005dfb602e913981526020016040518060600160405280602e8152602001620063bb602e913981526020016040518060600160405280602e815260200162005081602e913981526020016040518060600160405280602e815260200162005d9f602e913981526020016040518060600160405280602e815260200162005d71602e913981526020016040518060600160405280602e815260200162006895602e913981526020016040518060600160405280602e815260200162004f9b602e913981526020016040518060600160405280602e815260200162005aed602e913981526020016040518060600160405280602e815260200162006d13602e913981526020016040518060600160405280602e815260200162004a65602e913981526020016040518060600160405280602e815260200162006a05602e913981526020016040518060600160405280602e815260200162005f0f602e913981526020016040518060600160405280602e815260200162006eb1602e913981526020016040518060600160405280602e81526020016200638d602e913981526020016040518060600160405280602e81526020016200527b602e913981526020016040518060600160405280602e815260200162005897602e913981526020016040518060600160405280602e815260200162005bd3602e913981526020016040518060600160405280602e81526020016200566f602e913981526020016040518060600160405280602e81526020016200583b602e913981526020016040518060600160405280602e8152602001620055b7602e913981526020016040518060600160405280602e815260200162005a91602e913981526020016040518060600160405280602e815260200162005e85602e913981526020016040518060600160405280602e81526020016200669b602e913981526020016040518060600160405280602e8152602001620059ab602e913981526020016040518060600160405280602e815260200162004c5f602e913981526020016040518060600160405280602e81526020016200580d602e913981526020016040518060600160405280602e815260200162005305602e913981526020016040518060600160405280602e815260200162005c8b602e913981526020016040518060600160405280602e815260200162004ee3602e913981526020016040518060600160405280602e815260200162006e55602e913981526020016040518060600160405280602e815260200162004d73602e913981526020016040518060600160405280602e815260200162006781602e913981526020016040518060600160405280602e8152602001620054d1602e913981526020016040518060600160405280602e815260200162006ff3602e913981526020016040518060600160405280602e815260200162006b19602e913981526020016040518060600160405280602e8152602001620056cb602e913981526020016040518060600160405280602e815260200162006051602e913981526020016040518060600160405280602e815260200162004ff7602e913981526020016040518060600160405280602e8152602001620064a1602e913981526020016040518060600160405280602e8152602001620062a7602e913981526020016040518060600160405280602e815260200162004ac1602e913981526020016040518060600160405280602e815260200162005921602e913981526020016040518060600160405280602e815260200162006165602e913981526020016040518060600160405280602e815260200162004a93602e913981526020016040518060600160405280602e815260200162004bd5602e913981526020016040518060600160405280602e815260200162004b79602e913981526020016040518060600160405280602e815260200162004cbb602e913981526020016040518060600160405280602e8152602001620062d5602e913981526020016040518060600160405280602e815260200162004da1602e913981526020016040518060600160405280602e815260200162006c2d602e913981526020016040518060600160405280602e8152602001620069a9602e913981526020016040518060600160405280602e815260200162005abf602e913981526020016040518060600160405280602e815260200162005727602e913981526020016040518060600160405280602e815260200162004e59602e913981526020016040518060600160405280602e815260200162006df9602e913981526020016040518060600160405280602e815260200162004c03602e913981526020016040518060600160405280602e815260200162004d45602e913981526020016040518060600160405280602e815260200162005fc7602e913981526020016040518060600160405280602e815260200162004dfd602e913981526020016040518060600160405280602e8152602001620049db602e913981526020016040518060600160405280602e815260200162004eb5602e913981525060079060d962001abc929190620025fc565b5034801562001aca57600080fd5b50604051620070d9380380620070d9833981810160405281019062001af091906200287c565b8181816000908162001b03919062002b4c565b50806001908162001b15919062002b4c565b50505060005b60078054905081101562001b6b5762001b5d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168262001b7460201b60201c565b808060010191505062001b1b565b50505062002e30565b62001b9682826040518060200160405280600081525062001b9a60201b60201c565b5050565b62001bac838362001bc660201b60201c565b62001bc1600084848462001ccd60201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001c3b5760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040162001c32919062002c78565b60405180910390fd5b600062001c518383600062001e9b60201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462001cc85760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040162001cbf919062002c78565b60405180910390fd5b505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b111562001e95578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0262001d1a620020d060201b60201c565b8685856040518563ffffffff1660e01b815260040162001d3e949392919062002d03565b6020604051808303816000875af192505050801562001d7d57506040513d601f19601f8201168201806040525081019062001d7a919062002db4565b60015b62001e07573d806000811462001db0576040519150601f19603f3d011682016040523d82523d6000602084013e62001db5565b606091505b50600081510362001dff57836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040162001df6919062002c78565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462001e9357836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040162001e8a919062002c78565b60405180910390fd5b505b50505050565b60008062001eaf84620020d860201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462001efa5762001ef98184866200211560201b60201c565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462001f945762001f45600085600080620021e760201b60201c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161462002018576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600033905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b62002128838383620023c460201b60201c565b620021e257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620021a157806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040162002198919062002de6565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401620021d992919062002e03565b60405180910390fd5b505050565b8080620022215750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156200236c5760006200223a846200249860201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620022a657508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015620022c25750620022c081846200252b60201b60201c565b155b156200230757826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401620022fe919062002c78565b60405180910390fd5b81156200236a57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156200248f57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806200244757506200244684846200252b60201b60201c565b5b806200248e57508273ffffffffffffffffffffffffffffffffffffffff166200247683620025bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600080620024ac83620020d860201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200252257826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040162002519919062002de6565b60405180910390fd5b80915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82805482825590600052602060002090810192821562002649579160200282015b828111156200264857825182908162002637919062002b4c565b50916020019190600101906200261d565b5b5090506200265891906200265c565b5090565b5b8082111562002680576000818162002676919062002684565b506001016200265d565b5090565b50805462002692906200293b565b6000825580601f10620026a65750620026c7565b601f016020900490600052602060002090810190620026c69190620026ca565b5b50565b5b80821115620026e5576000816000905550600101620026cb565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620027528262002707565b810181811067ffffffffffffffff8211171562002774576200277362002718565b5b80604052505050565b600062002789620026e9565b905062002797828262002747565b919050565b600067ffffffffffffffff821115620027ba57620027b962002718565b5b620027c58262002707565b9050602081019050919050565b60005b83811015620027f2578082015181840152602081019050620027d5565b60008484015250505050565b6000620028156200280f846200279c565b6200277d565b90508281526020810184848401111562002834576200283362002702565b5b62002841848285620027d2565b509392505050565b600082601f830112620028615762002860620026fd565b5b815162002873848260208601620027fe565b91505092915050565b60008060408385031215620028965762002895620026f3565b5b600083015167ffffffffffffffff811115620028b757620028b6620026f8565b5b620028c58582860162002849565b925050602083015167ffffffffffffffff811115620028e957620028e8620026f8565b5b620028f78582860162002849565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200295457607f821691505b6020821081036200296a57620029696200290c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620029d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262002995565b620029e0868362002995565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062002a2d62002a2762002a2184620029f8565b62002a02565b620029f8565b9050919050565b6000819050919050565b62002a498362002a0c565b62002a6162002a588262002a34565b848454620029a2565b825550505050565b600090565b62002a7862002a69565b62002a8581848462002a3e565b505050565b5b8181101562002aad5762002aa160008262002a6e565b60018101905062002a8b565b5050565b601f82111562002afc5762002ac68162002970565b62002ad18462002985565b8101602085101562002ae1578190505b62002af962002af08562002985565b83018262002a8a565b50505b505050565b600082821c905092915050565b600062002b216000198460080262002b01565b1980831691505092915050565b600062002b3c838362002b0e565b9150826002028217905092915050565b62002b578262002901565b67ffffffffffffffff81111562002b735762002b7262002718565b5b62002b7f82546200293b565b62002b8c82828562002ab1565b600060209050601f83116001811462002bc4576000841562002baf578287015190505b62002bbb858262002b2e565b86555062002c2b565b601f19841662002bd48662002970565b60005b8281101562002bfe5784890151825560018201915060208501945060208101905062002bd7565b8683101562002c1e578489015162002c1a601f89168262002b0e565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062002c608262002c33565b9050919050565b62002c728162002c53565b82525050565b600060208201905062002c8f600083018462002c67565b92915050565b62002ca081620029f8565b82525050565b600081519050919050565b600082825260208201905092915050565b600062002ccf8262002ca6565b62002cdb818562002cb1565b935062002ced818560208601620027d2565b62002cf88162002707565b840191505092915050565b600060808201905062002d1a600083018762002c67565b62002d29602083018662002c67565b62002d38604083018562002c95565b818103606083015262002d4c818462002cc2565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62002d8e8162002d57565b811462002d9a57600080fd5b50565b60008151905062002dae8162002d83565b92915050565b60006020828403121562002dcd5762002dcc620026f3565b5b600062002ddd8482850162002d9d565b91505092915050565b600060208201905062002dfd600083018462002c95565b92915050565b600060408201905062002e1a600083018562002c67565b62002e29602083018462002c95565b9392505050565b611b9b8062002e406000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a22cb46511610066578063a22cb4651461025d578063b88d4fde14610279578063c87b56dd14610295578063e985e9c5146102c5576100ea565b806370a08231146101f15780638da5cb5b1461022157806395d89b411461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b610109600480360381019061010491906113b1565b6102f5565b60405161011691906113f9565b60405180910390f35b6101276103d7565b60405161013491906114a4565b60405180910390f35b610157600480360381019061015291906114fc565b610469565b604051610164919061156a565b60405180910390f35b610187600480360381019061018291906115b1565b610485565b005b6101a3600480360381019061019e91906115f1565b61049b565b005b6101bf60048036038101906101ba91906115f1565b61059d565b005b6101db60048036038101906101d691906114fc565b6105bd565b6040516101e8919061156a565b60405180910390f35b61020b60048036038101906102069190611644565b6105cf565b6040516102189190611680565b60405180910390f35b610229610689565b604051610236919061156a565b60405180910390f35b6102476106af565b60405161025491906114a4565b60405180910390f35b610277600480360381019061027291906116c7565b610741565b005b610293600480360381019061028e919061183c565b610757565b005b6102af60048036038101906102aa91906114fc565b610774565b6040516102bc91906114a4565b60405180910390f35b6102df60048036038101906102da91906118bf565b610881565b6040516102ec91906113f9565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103c057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103d057506103cf82610915565b5b9050919050565b6060600080546103e69061192e565b80601f01602080910402602001604051908101604052809291908181526020018280546104129061192e565b801561045f5780601f106104345761010080835404028352916020019161045f565b820191906000526020600020905b81548152906001019060200180831161044257829003601f168201915b5050505050905090565b60006104748261097f565b5061047e82610a07565b9050919050565b6104978282610492610a44565b610a4c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361050d5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610504919061156a565b60405180910390fd5b6000610521838361051c610a44565b610a5e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610597578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161058e9392919061195f565b60405180910390fd5b50505050565b6105b883838360405180602001604052806000815250610757565b505050565b60006105c88261097f565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106425760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610639919061156a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600180546106be9061192e565b80601f01602080910402602001604051908101604052809291908181526020018280546106ea9061192e565b80156107375780601f1061070c57610100808354040283529160200191610737565b820191906000526020600020905b81548152906001019060200180831161071a57829003601f168201915b5050505050905090565b61075361074c610a44565b8383610c78565b5050565b61076284848461049b565b61076e84848484610de7565b50505050565b606061077f8261097f565b50600061078a610f9e565b90506000600784815481106107a2576107a1611996565b5b9060005260206000200180546107b79061192e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e39061192e565b80156108305780601f1061080557610100808354040283529160200191610830565b820191906000526020600020905b81548152906001019060200180831161081357829003601f168201915b5050505050905060008251116108555760405180602001604052806000815250610878565b8181604051602001610868929190611a01565b6040516020818303038152906040525b92505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008061098b83610fbe565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fe57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016109f59190611680565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610a598383836001610ffb565b505050565b600080610a6a84610fbe565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610aac57610aab8184866111c0565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b3d57610aee600085600080610ffb565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc0576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ce957816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610ce0919061156a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610dda91906113f9565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115610f98578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610e2b610a44565b8685856040518563ffffffff1660e01b8152600401610e4d9493929190611a7a565b6020604051808303816000875af1925050508015610e8957506040513d601f19601f82011682018060405250810190610e869190611adb565b60015b610f0d573d8060008114610eb9576040519150601f19603f3d011682016040523d82523d6000602084013e610ebe565b606091505b506000815103610f0557836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610efc919061156a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f9657836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f8d919061156a565b60405180910390fd5b505b50505050565b6060604051806060016040528060348152602001611b3260349139905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806110345750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156111685760006110448461097f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156110af57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156110c257506110c08184610881565b155b1561110457826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016110fb919061156a565b60405180910390fd5b811561116657838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6111cb838383611284565b61127f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361124057806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016112379190611680565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611276929190611b08565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561133c57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112fd57506112fc8484610881565b5b8061133b57508273ffffffffffffffffffffffffffffffffffffffff1661132383610a07565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61138e81611359565b811461139957600080fd5b50565b6000813590506113ab81611385565b92915050565b6000602082840312156113c7576113c661134f565b5b60006113d58482850161139c565b91505092915050565b60008115159050919050565b6113f3816113de565b82525050565b600060208201905061140e60008301846113ea565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561144e578082015181840152602081019050611433565b60008484015250505050565b6000601f19601f8301169050919050565b600061147682611414565b611480818561141f565b9350611490818560208601611430565b6114998161145a565b840191505092915050565b600060208201905081810360008301526114be818461146b565b905092915050565b6000819050919050565b6114d9816114c6565b81146114e457600080fd5b50565b6000813590506114f6816114d0565b92915050565b6000602082840312156115125761151161134f565b5b6000611520848285016114e7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061155482611529565b9050919050565b61156481611549565b82525050565b600060208201905061157f600083018461155b565b92915050565b61158e81611549565b811461159957600080fd5b50565b6000813590506115ab81611585565b92915050565b600080604083850312156115c8576115c761134f565b5b60006115d68582860161159c565b92505060206115e7858286016114e7565b9150509250929050565b60008060006060848603121561160a5761160961134f565b5b60006116188682870161159c565b93505060206116298682870161159c565b925050604061163a868287016114e7565b9150509250925092565b60006020828403121561165a5761165961134f565b5b60006116688482850161159c565b91505092915050565b61167a816114c6565b82525050565b60006020820190506116956000830184611671565b92915050565b6116a4816113de565b81146116af57600080fd5b50565b6000813590506116c18161169b565b92915050565b600080604083850312156116de576116dd61134f565b5b60006116ec8582860161159c565b92505060206116fd858286016116b2565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6117498261145a565b810181811067ffffffffffffffff8211171561176857611767611711565b5b80604052505050565b600061177b611345565b90506117878282611740565b919050565b600067ffffffffffffffff8211156117a7576117a6611711565b5b6117b08261145a565b9050602081019050919050565b82818337600083830152505050565b60006117df6117da8461178c565b611771565b9050828152602081018484840111156117fb576117fa61170c565b5b6118068482856117bd565b509392505050565b600082601f83011261182357611822611707565b5b81356118338482602086016117cc565b91505092915050565b600080600080608085870312156118565761185561134f565b5b60006118648782880161159c565b94505060206118758782880161159c565b9350506040611886878288016114e7565b925050606085013567ffffffffffffffff8111156118a7576118a6611354565b5b6118b38782880161180e565b91505092959194509250565b600080604083850312156118d6576118d561134f565b5b60006118e48582860161159c565b92505060206118f58582860161159c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061194657607f821691505b602082108103611959576119586118ff565b5b50919050565b6000606082019050611974600083018661155b565b6119816020830185611671565b61198e604083018461155b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b60006119db82611414565b6119e581856119c5565b93506119f5818560208601611430565b80840191505092915050565b6000611a0d82856119d0565b9150611a1982846119d0565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000611a4c82611a25565b611a568185611a30565b9350611a66818560208601611430565b611a6f8161145a565b840191505092915050565b6000608082019050611a8f600083018761155b565b611a9c602083018661155b565b611aa96040830185611671565b8181036060830152611abb8184611a41565b905095945050505050565b600081519050611ad581611385565b92915050565b600060208284031215611af157611af061134f565b5b6000611aff84828501611ac6565b91505092915050565b6000604082019050611b1d600083018561155b565b611b2a6020830184611671565b939250505056fe68747470733a2f2f626c6f636b636861696e617373657472656769737472792e696e667572612d697066732e696f2f697066732fa26469706673582212203ffc51b95cb41cd3dac1b5a726f08eed26491b4dc87a61b7c5fd6ba03bfd8ca264736f6c63430008180033516d5175744a6e46566163647667616f5a597269534b79384647716337435074594376676e4e6e7158466b4d674d516d6266553370746d4b685078515269726f58654b743435697859694272364c456a613563314d32706b48774671516d646f513831346546516e7064675835644d573570436b5861694c7636393459646d4c79626f617a4b424b4b39516d586841476f624859384741366e61474a7372564a74546e755467714c5061694c5267347163614b654d716f70516d5837535065356e6862626b5064634653654e79467461395044653263624250736d624e6e6662395376544354516d62714a347741343675424a385a6a4b746f4447467052595743647a624b6652673366335348654c7835346a76516d6134327459386b7470324554716845743461694c4e31514c37477735397552436d703545554a726365787752516d59414c383865425348786b506d4153415143314534574c644a4c623131735262357939595077756b71423561516d65487853416f656631795364474638564779546455416f345a68695a635937475562346869356761684b4838516d577667713957707953734c4c5145476b5261353173525148695353466e644d68637666334c6f33664e574867516d506e413662717858476d59537a38667a424d72516d38727a6f5a677270765973463153354641707750657564516d637661327a736a3458707170594673674544434769636b6b77696a6672537745434e525550426767707a5335516d646246444e455158653339637a4366704e667579464e3161733251454a505143476752453965513271616a6f516d566a767a4644676b4b4b5944747a344151614c52503175456d7a7a5253574d74334e537877484a6178755637516d5967326869376447656b6741554d77505036573761555a7651544d66466336773139783376676d6b56777855516d52787373334a69735342665a4665394b59355646596d484370705273617071766e6259773975777875764262516d665173714571416f746a45616f37366a71634a3476577255665a6632787959704a44636e6d66364741475248516d5a5539726177625343363938416261764865423435506154516156376b31796f74504138466457336b326f50516d6262644441434d356e6b477152473363536d6b3868594c34365857466b54387a766b626e7262636253716131516d5434476f586158355a59586e436d6b6964426a545777524c35737050665363516665636e4a5a644544443169516d4e6459623462716d3351767042464d663355787145454a4d5a72767a3835566f526d47386a7743334b334b57516d5033684a327a4257544b344674394258504c58336b4c3164526d6b51466f4150394752567a59354641373836516d627337686f5a57426e313233777951576d56794d6e51366a5959314541384d6d447142345a77417832386f63516d554b384e5765437245487a44415a7a6852763955744e3353393350486b7441744c514567504b4a635859416b516d50564c6a5933684e66654855554d474d757461394b7a6d6f48376e3859724468426b5071393132666d674365516d57546e726668514334437143414b5838576e47644b6d6b70586a65337a6633643855684469315476386e476e516d5a6b3632646436627658746769623742365a634b66377669336a43764177514171476a464346793641323834516d62647046714a59354e686968587746516b445a414a64346a7667555038595a6b41657179614a6b6a4e75506e516d63506931614b77465753746b615571636131725470684e796b706a48624b386a38784778593953543145314c516d51624b6d415a514c424e75557166726d6f4256426e42375048356f78573677417375344a5a35577034655868516d6345526f48484d3370524b5442424d3244696b75704a47674e314d517750435169397376586f754b6d463153516d51794d5438316d754c36627743547174363869616673776659315a434a3934576573794e4e48777163744c77516d54584b6577734d645953326a74484838365944707a61537a724d536f74727836344465554833575a46503655516d613451705864676e353731355777693444575171713146644a3377733941654e4274766b5a4c63483555646e516d5962445a32654b65724b32386443444a6e384b58414d754237584c47317454594d35477150797571624a7343516d5064376a56503451516575464e585462556d50486858506261623875503832706e3671424261566153384752516d5a4c4a7878634e33784738695a32737073613837397379397656485252774b38593258685244446f39786a76516d63766d5568325a5875324a6764413539727878437948647152543735684d5577326f554263524235694e4877516d58704372654636623375796254347838646b58614a5674696b32775254356f3451464d65525a6e7068435673516d6169735a377241435157426d425a72593752435842484d3977666743394c4474674d643377336654366b414a516d58447868357152615969715451767a50754476563173697656377a5750487250316142317959327967633850516d655138475276754242326f6f39716b657266596b4c4446523934516f56634e6a6d46784a4d51765062684a41516d665653335178536d4c7666374d455a57596a476d4d377665594a59724a7259547977704a644c4c396e4d7374516d586d62785554785147555554667833556a33316870374a793377626a5a5934706e6f436f3168575473386431516d5145556f4b416156756b596b74726635764344734a5675355459624c564e507154786a7a4146723262633942516d565642423869646647744d6f764d554e624a613973414b4e5056334c4c55323576566d6166507a7556673268516d61366a316d63573272706d5570665337757363536b434a71646b7341486b42413942525644336a4168564653516d537570616e7953766435527559506f6a5a6b325a4271433665757967504466545375315362337741426a346f516d544d7a7873486563364c6738754b674d4859555264755746727770414d5265715778335a7531686b57593572516d5976456b546b317952546831696e485077616d69467a514d63645a3252434b31526b35734746624e73784e4c516d615677716d3362706767797134394a6a486947536453363956596757777069754c697657547532624c783457516d61626b697a715769575341724a384a515a39317a58657758715a3153426f615973675636344d535663365766516d544d663467534a76584b456e5a4c6132594a4759585544595670464b786f5941725256707943765047586b36516d5a6545727846434754356b4e44684b363766695a6d5174763338424d76416a376e767a357348394274396f77516d52334646616b6347356e4b796e5731683234474363784445627768555a345a76337668514259314161337079516d537a48473766444b62623461345a725a61775a4748627179644333314b5054424b33424e615446316e577a67516d505358513644345a5a434b74694e667a6a47795a78656d544262676d445756543164567378336d674c697268516d636772515865783952417437514648594b4d5974577166666a6b6338514b464350415a657033535a4a353142516d4e6d7a314c4c554a677a3359767273346879686a6d45357941375a585741636d466b726f6637624759685956516d52454c58656f51644a504d68366279477977675155347a4c714c46527056434e67714b64763931594578686a516d63576e757a4679627945464654454750555350643447414668626f524a73796a6348364b7178745739753571516d586e6e514c784e4d5167566152704854614156677678375a444c4845366769744d484d595038525a45656a69516d566652457a71536163634e554d5141454e344e3957567a517845446441647858696d466d713845643539536b516d52486f447664624d5355544d6f59356e4c4b54746e7246554465547a6d677a7966397977684444577a676966516d66456e4d4c6a6e577869504d677855706a72657854697531344d5850456236536d4c42785464456a4e317765516d56445a646150354732435a4a625a5545684645347578313752537654506f69386e746e39644d555a7836616e516d5941505a7a456847364e79474175766a31376d52734152784e76733269485571796f67434731386632426441516d654737464d58716666453846547a7773456b517544617179665039596f624d6d42755934346348727858574d516d5765635045674479755354726a5a5251533471773743436e64675958394a5374626854796e69764437784a4e516d54356e634765337678423939456e486f354d6567345635596331385a4e364c6f7a46475538364b546e576642516d50374e4736733634415239334544526d625a39656739366e6262684e4e697a4b414341773437736d5738526b516d57314e524b6476347a34643855794274473737434a7652324e756838735431786e664b4e545a46574b387178516d557445685a65796538746e4a644b41674e314c7851475570317a5743483948504b69766b63474d4868707875516d5466534e7534334b56686a764777663374433142665144356667614665486e6861506f427036564171505864516d53526d4b6231566e69694e6b5875475a687a4b4466766a31504b5a50544b41716644674e70477548387a3674516d5961726f363977765937726f4146574446794343356468356b6e3137484e38716757555a4175636941366836516d58677a544653476b4a75784c614e524b504b74727058736445756773574c7935386a7a4d383137516b48567a516d55504a38384466733576386f63727a315361654a3578466f344e59534a5572344b32617965456b596a4d4e77516d526d4476325443524c636a7162613631454467554347634c7952765a6757314b78584a326e7655547556786a516d614b4e5936694536506d71504d68417667736a4b616a4a754e376f62446475396d6579534651766b5a505578516d574a6b4b6b5248336a756a597459327250743445707a41724676463473314775324865337477743872454766516d5a3973585472616452587265595a6a4e575553566b4b57464856356642647a47547478723171756d32646545516d66523965796731424868657761484a7832655070474b72344e685437734b6753736b45684a74746173546653516d624b4354333150506a45465672346b32373962767759763865545a52585977594b3263546b4758654b416331516d4e536952315163594255446b4d4b483946786a34615958366d425a4657674661715141646f4d447478533847516d5439566f4b4472326a476e7861396a6570546b6b746273734c735a58577973487142747a32456b78654a5272516d6150435a5963777848786d6d6639446f7a6f4c79687972777531663535436f45697564717534744a70736652516d56396b31326f6133574a5a517750676d7435434e487777717158683473706a7168514551504e473636466a66516d5a6a6858786e34614c7a6575787373735253376e6f615946397256704b794e555247454e4e64416a5a515751516d64463636667a544c394431455653327377356b547364705132653543314343436657705a4e4d557261477145516d614c724e736e624531635456614676666f6845373634476e766f6d314656684c4561587848753861776b6a41516d636765396e323852575a4e4e536f503764786263526a7061767a4d5a574d396244623450485461556a376278516d5947354256716f4d35344e4c48413264684c724e356a46763141724d456134716b4b41555277654d544e6f6e516d5435666d6b424a687a6b6273483553444745694b54437a446a38444c7a5851637a706e4c6f54557843416257516d585234573878636733394c4a75724471426161486b6f6d3770645036576d354e6e706a714346505332737935516d665a666b31624c44583251746b5845454247487957387067354c777179575a6d6e364268464a616355514454516d4e5a616b32396d4544797443597a7141386b7747586546566f4c5441535239713351704567444c4a65664838516d64747548504738726443426335694c746d6d545a7974786d71716e5079535655363837773241325838504365516d6453636a5838674770693652486b54676144686d614b616532524633324b52684c7741594645564372783742516d65704373744d6332656f45514a546b7465557a774c7757445038544e634259374131625838374e6463754b57516d517471447971747871433671683153516d554b3773356931364b4a3842534b733367446950764b5274646742516d616d46796532673343524c445754616265473248725a7456375a4165534534507a65517659567a7172383634516d655662614c373469684673385039383369545674616f4b4b6856434b5848675a713734346154317454394d42516d63596d6a6e333853677a414c717050624639435a57386359417358664a316d68747762674c7a647579686738516d534b3350765a756d79723835436574727a507961547855654434436255637171643279334c376f6578587533516d52655a445276664a43346670656239337161396f68385252524a4d74674568776471554d34734b41376b5846516d615a4165654e5835623966787156686767545442474d3270363745424d5576584e784632687376676e34667a516d5936437765723871464b6168764452505873397439793641696957346e7656564a6a5256507764516b76766d516d537a48343153324735697a736a6b5770523444427043733162367a335545627146614a484635695055474d4d516d557744695877525269356b4135666741424d446b37674e51507a4d434462796d5251756f4746776163573236516d525242643664356a6a724e396f705847597a4b4b42564c336b7763585561666556557969516f703753627470516d51397763594843464b386e756956376d35476b3637377167765a4e6e6a686f4b3138706366774878446d4a63516d5a545756686539395133473237714c695552617a3669643531336d57466a44613572713665564569704c7059516d53566e3442367234467436673848466e57327a58727941337776365362646d785671714d6f324731796a5941516d65566b66364e575a6a676768454457506142454a42486e4e635466776b41566138704a69434e686479453333516d4e513232714e6b54687a31635379504a7a415a343653336a4c75373152643651677075334d58696a73763472516d593551413355704d3253524c556e53736157395164684a576a556b59454d5254755343487345596e75457370516d546d5a5350444e53467a74574267583833396e69426364656155523742416d71476175725639574e69663944516d50793264474a66656131504d667061706b4373583379483152646a664773485845637a6e66726a415164357a516d584a46367434676273705742436772323534656d7671716870576934584c614d74794d475345657a436f4c66516d5656636471624e576677474b417176724d6d464d4d55396978663565426747694233385632445865537a7473516d57697652486b79434b4b73766b4d6a564e426a794851556278746e68616f673868623663734132584e656845516d57764a73616539625542646351704362726358336854546833544d7154524d48793171695a736576796e5034516d517a4b6d39466b3879356f73374a465a314d513135563979534142366b31546e3437666f56336d686633647a516d5a5934474d5753615553314539794b475971443559355361647a55776457726473344c4d785a443139794e58516d5939706357545a486474783857557071795a4b6a595859797759784d734e36316438535a7a6e46586b5a7676516d5232376d4d546d314253586850694c367a4d5776554c7359544b354e3158795136385752663235617852324b516d504279756f63374365424c64334a3252684a505448424b546173366a4e586d34424532584872463877733175516d59343155564753785146454e705a363248554762324639785034665a4876674e36386a473936625579614448516d54344337626441576f776654316d445264745950617365546d7065646839365a556836704135515431777574516d664556647350536b32754d41445044626559725056664a65664e37724d5a4373627563697356555633664668516d503844537477546332417a4a3541656b564a4a42587278577077594d716a74694a723246355972764b555a70516d5861325a566d34506d6e3543344c43615759654259777a47434e7a51774532477951484a665945336755506a516d5562474d4745736a354a426344665172587a38715333456a4c556d786a4a616b7a316e723145776375694245516d5376674c76794a476847545636706f51714446376a7a7050507766546e7564397a4869665954784242616343516d6558664172413744713762784675645a3731596b69587246614658376e79596e4267683655456833737a5932516d556e6b4174504a3167326f4678596432746d5669674841456e384d773846636233757a417173416d37467574516d625937717a5a5566374d3562654d6666344c377953367671783565443663795a7750415165314a73426d6331516d61685979444c4669563748734a6f3432734b555464424d506b72624b6534313465484b4c6a6b746a555a5841516d585463646e42794142754e69744b345876445845543350316751617368474546543477506334784b68515548516d5541596a6b706446775867556552336d794a7161544635727542575061613646473941435177395439563846516d4e616b77793831396a4462414d5a6b55775454756b6f4234504438594c465450696a4476316a5472774b5565516d6464413333454c6459664136356b315651667a653761527a6b686d5775715176676a7338586d6d7545724265516d596233696b4b7341326639474375325a324556776f7754596f54466b7332346767686b6d527570534e6d5352516d646545445566663670413137373765434a706774506e727761747752536d32726d3365394557516d50767757516d596d7a654b614233467a446a6a435a413235776e4a38785772503146715741457a545a37364d626370344345516d534b6f7734366364334d4b42384571534e78443537385950597538447079374c62485647315a554467636742516d53563564375a4d466834597762536575357a33645145666d4470527970594473333850785066414135743246516d566a70596f4646515576423939634b476b78414b6456414d734265584e4d783943584d56426e783947694173516d5a53417243514772667762337835735254457745356b6f44477464635a6e5a70464a6d32354d483351715046516d5037786d46776d52663745527638724b756438316b6a695868744631756f426345526a6d393773314e354e43516d6267784654583645625353554c45325474474b6d6741746f454a4a4b7834506679644e39457a527a72386357516d656a5464665251395863316d4861475535353131617561487248445a734b6273664a3269443545584a484359516d6267754c394135544d725a6b6531774a6676685755487934314231466d7269784b616e454e6b434243517858516d6571657657626852707776644d7368736e4b4e635138456767596579625263756871396f6f314c3574626861516d5577647072544548554e487a4d545863475a5a636464416d7943536678766d51344138485343477376414642516d65504c626d575a6a48674770745948624b67664150385265364459436663676d4236474d514c725354733373516d5659754b5671667a34696532787a546a4c674d57616562416e517858673269515a3244693669564c62627a33516d633466694c4850394d6f7458746b315433426931546251726843583855364a6932354856713951706d6d5145516d636f704339426a5958527353766e324c6677727242737770744d77596d3678797a4c3973625768646b485634516d61586d5a3955574e6b63466f4d52566e66326d58547554656e565279567a54536e5a51586a32513143696e38516d6531624c383362474e537957583451504d4b626a32314852364d683850617a717a32556e7332755851765757516d62617442444a76376267426a72343833534376726f7272436f6b5a4450744d5977616637554d56796f584748516d5a446b326247654546416974784d377773695439674278795447596a63563457714d73686345516468545668516d613539705754674d4a534a483431647762516a3768315a43546b33694c677075524a4e755150795a6a76506b516d586e6934796a70434b42347934434a4b47484e687432344a4e376b786f794a3752416975514e643945694c42516d5744466354333768434c7072546671763150715069783565617062706b6a704c555348626151705678364d5a516d566b78744c686339565636786750365050774a72685073367772485a7a5454436b5444764741417364617175516d55667672347055426d584b54526b57476b39545a7166315a6d5a4e7477434335533667434b77426837503358516d5245313434336877685a53427766504e68516d746f455746556869474c4270677737545063596d7136544665516d61447375666e7a333667626d5059413665597531473558704e77563863776e7837356f526871615259467156516d616a6a383735685a444131677071534e4b48434573474673546677553475465678365a69434a486f6b66446b516d557379524d464331355148614e74715075766e48376b5355686f6d7a4867455a47725038383264364561597a516d616e3670594e453741787942797769664b7854387678746135686577564771334d6932524757397a634b4833516d4e76626e6b744d416e416244334659617833663947616e344170567731363634356a67714c7476686a63356b516d5532615171556d715a64773966514b54346f614561654b724b6e7a6b38543953625962473448334656444444516d52646a63534e56556d64384a616b676246706356794377736e6a5233794e33564e70714c36564a4a6d466936516d656f337a7152646d6d4a71633956435359627a6166316b36657943724764646170337a38673576424c563953516d54386745544a677875454731615a566461474e4168626745663338573434696b6f6853764545756471685866516d51705731755a5131685168444a4764636f7375395268595a57357535654b5371414a6b656f333541584c6d51516d516546706d7142536233625379706b4d533970466650636d6136317643477737534c796e4464545732396841516d4e65597a31385557755a6e784775516e6f796e66455a644239676f6a6542317834683946414c326773386f57516d5872376545574a48766d50706b5036344871484d7a6f376d66456e475357625939625535514e426e6e534476516d577853774d6e6d51785264676545714b6a7177753832316d4e375635504a34466374716233446f7535744244516d54394c5551796d324c546544576878527256684e34624677374652414e56684c75547a5531486b6164384148516d52724c36505672747a553345677265764b6e3754664d67354c654276676f4c54353173446f365777366f6659516d633448565a436473533556366d727354777237774c41794457596464513136556e596d4e327232593547624d516d565163616d4a65744a556838515a565a7135714655337a594a54683941436453725a6e7a7478434677503139516d656b7051734651775a647171506d343975363774524a536e50355a594166636e577472367879567974455661516d524d31667472787734594c543753397563724a655166434275467a6f4c713646637141334a796d42416f4c6f516d57317a6f46694636644d42697a4e7176754b5a657a336479476d3151337a6d757735527a445347396d555738516d6342794a5052446a6e7a58793843324d364372595a483268544a504a41326d565652417547316a4769755a71516d616437506b46454e59773551746634716a534a76326941564c5958595454575a5a4767474770334d534c5565516d566146616b59506f6a454b41414565755144643247423747536b58365132717a394e62545379434831726655516d626d63726b5242717270615164767962694e44366b764d4869674d70785a61687459714447794250534d6d66516d4e665a78655a6e4c6d476756617343324d51516e567532436f385a6836456b5676786462325576537964376d516d63527961615632484236616d676e4161755253736544325a3747615468467a4d367a64684a6938534b6e6764516d5274656f78784e51743746367872624334453266694357465a434d35515748354d774235447a745643695435516d64435961546535467868666a536f455a6165505a634135464b6a47587148476f366171594870775334685539516d643159794b693136793356367178786234663265734c76546d357738586e66625138664871373648697a6e31516d5a747763384359526a55647a4d6331315a5169506f345831466867584477753343776257644d353531686546516d587956435652776879384344436d3870344e315a68564561527a33755a38376e415439524a4469693370626f516d52786b463554357a6d7379463567657963315765477871586631417a7453547254455656345177444175545a516d557a3153796f52727445635375723548593236757a694763574b676147396a4d706d557a37516e3444575574516d546133666b7655596477706358326b4c584838533238557a487a734c6339525962786b6d7458366f79427745516d556653456d33597377316b5a745a4168747256424e45355751397076387043527a74374d317847316358506f516d64354857465738796f33623171635242796b714d7956794e6566326f61733174533852587534647650526b41516d624d53654e68424c6352715a4a6e7a4132756971477653386a68694d5069757a4d3635656434573550683654516d59545a6a787836376b4b3544766667596f3874356466696666634a6350634e416937624b66614167744c6634516d644c6731534b72664a463375577139674c69454558433546456d387a686b51355661665331664d483772694d516d5643726e56357a6a797334675778505670506474514c376f69484a6855613263733275375969655474775131516d62797874394578634b54584c61716d797034516162764279504363466b7267566d5159484a33746755715337516d61586b44333564736768476e6966334c6257675746413157615635714d35513744645536777878534e383278516d535a34583552457653513674413871746d78523756775a70626d6d4c694776625352685466686b7a47524848516d54736766395748504e635478364c43413559673532755641787550786f4a526845566a4a574b425651796843516d6362454e637265424c5354634141764c436a50426f343970564a4e4a746b62797a706233796e68714a474253516d6569474447563968576d7173437975676848663444416d7037644d5a325a776b64504c52415966365650596e"; + +type LarsKristoHellheadsConstructorParams = [signer?: Signer] | ConstructorParameters; + +const isSuperArgs = (xs: LarsKristoHellheadsConstructorParams): xs is ConstructorParameters => + xs.length > 1; + +export class LarsKristoHellheads__factory extends ContractFactory { + constructor(...args: LarsKristoHellheadsConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override getDeployTransaction( + name_: string, + symbol_: string, + overrides?: NonPayableOverrides & { from?: string }, + ): Promise { + return super.getDeployTransaction(name_, symbol_, overrides || {}); + } + override deploy(name_: string, symbol_: string, overrides?: NonPayableOverrides & { from?: string }) { + return super.deploy(name_, symbol_, overrides || {}) as Promise< + LarsKristoHellheads & { + deploymentTransaction(): ContractTransactionResponse; + } + >; + } + override connect(runner: ContractRunner | null): LarsKristoHellheads__factory { + return super.connect(runner) as LarsKristoHellheads__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): LarsKristoHellheadsInterface { + return new Interface(_abi) as LarsKristoHellheadsInterface; + } + static connect(address: string, runner?: ContractRunner | null): LarsKristoHellheads { + return new Contract(address, _abi, runner) as unknown as LarsKristoHellheads; + } +} diff --git a/app/src/providers/evm/index.ts b/app/src/providers/evm/index.ts new file mode 100644 index 00000000..55f58ba6 --- /dev/null +++ b/app/src/providers/evm/index.ts @@ -0,0 +1,5 @@ +import client from "./client"; + +export default { + client, +}; diff --git a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx index 087ae3c8..538236a5 100644 --- a/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx +++ b/app/src/ui/svpervnder/collections/larskristo_hellheads/LarsKristoHellheads.tsx @@ -27,8 +27,8 @@ export const LarsKristoHellheads: React.FC = ({ className 31/150 Sold - Lars Kristoffer Hormander's Hellheads is the latest from its #darkart creations. Featuring an astonishing - 150 items series of digital handcraft mastery. Own one of this limited art today. + Larskristo Hellheads is the latest from its #darkart creations. Featuring an astonishing {metadata.length}{" "} + items series of digital handcraft mastery. Own one of this limited art today. diff --git a/app/yarn.lock b/app/yarn.lock index 389e3c79..24db0b53 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -1532,6 +1532,15 @@ mipd "0.0.5" zustand "4.4.1" +"@wagmi/core@^2.6.17": + version "2.6.17" + resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.6.17.tgz#46445d12bc46b1fa59d50165ccb50280eac34957" + integrity sha512-Ghr7PlD5HO1YJrsaC52j/csgaigBAiTR7cFiwrY7WdwvWLsR5na4Dv6KfHTU3d3al0CKDLanQdRS5nB4mX1M+g== + dependencies: + eventemitter3 "5.0.1" + mipd "0.0.5" + zustand "4.4.1" + "@walletconnect/core@2.11.2": version "2.11.2" resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.11.2.tgz#35286be92c645fa461fecc0dfe25de9f076fca8f" @@ -7815,10 +7824,10 @@ viem@^1.0.0, viem@^1.1.4: isows "1.0.3" ws "8.13.0" -viem@^2.9.13: - version "2.9.13" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.13.tgz#3053394a0b3b60e46706951fefba6dd43ed1f50b" - integrity sha512-TxNZOWFwr2Pc6CeY4tViFL2NRq9v86HofAPkhBgScP8DUn3EeSbQhmDXbjMZNkZvXoMqWVl0AZM81rEOlaKrbg== +viem@^2.9.20: + version "2.9.20" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.9.20.tgz#71c6a45d22a8150072adee3dcb7a93fff5347d16" + integrity sha512-PHb1MrBHMrSZ8Ayuk3Y/6wUTcMbzlACQaM6AJBSv9kRKX3xYSZ/kehi+gvS0swQJeAlTQ4eZM7jsHQJNAOarmg== dependencies: "@adraffy/ens-normalize" "1.10.0" "@noble/curves" "1.2.0"