{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721Auction",
  "sourceName": "contracts/ERC721Auction.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "winner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "winningBid",
          "type": "uint256"
        }
      ],
      "name": "AuctionFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "processedCount",
          "type": "uint256"
        }
      ],
      "name": "BatchCancelProcessed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "bidder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "orderId",
          "type": "uint256"
        }
      ],
      "name": "BidCanceled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "bidder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "orderId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "winningAction",
          "type": "uint8"
        }
      ],
      "name": "BidPlaced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "gainOrLose",
          "type": "bool"
        }
      ],
      "name": "RoleChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "orderId",
          "type": "uint256"
        }
      ],
      "name": "RollbackTentativeAgreement",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "orderId",
          "type": "uint256"
        }
      ],
      "name": "TentativeAgreement",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ACTIVE",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEAD",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "LISTENER_INTERFACES",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WAIT_FOR_FINALIZE",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WAIT_FOR_REFUND",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "byAnima",
          "type": "bool"
        }
      ],
      "name": "_finalizeAuction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "activeAuctionIndices",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "activeAuctions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "activeToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "animaToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "auctionInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "budget",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tentativeBid",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "budgetProvider",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            }
          ],
          "internalType": "struct IERC721Auction.Auction",
          "name": "auction",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "bidId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "bidder",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "winningAction",
              "type": "uint8"
            }
          ],
          "internalType": "struct IERC721Auction.Bid",
          "name": "maxBid",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "auctions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "budget",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tentativeBid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "budgetProvider",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "state",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "batchAuctionInfo",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "budget",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tentativeBid",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "budgetProvider",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "internalType": "struct IERC721Auction.Auction",
              "name": "auction",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "bidId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "bidder",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "winningAction",
                  "type": "uint8"
                }
              ],
              "internalType": "struct IERC721Auction.Bid",
              "name": "maxBid",
              "type": "tuple"
            }
          ],
          "internalType": "struct IERC721Auction.AuctionWithMaxBid[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "bidIds",
          "type": "uint256[]"
        }
      ],
      "name": "batchCancelBids",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "bool[]",
          "name": "requestShards",
          "type": "bool[]"
        }
      ],
      "name": "batchPlaceBids",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "batchSize",
          "type": "uint256"
        }
      ],
      "name": "batchRefund",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "bids",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bidId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "bidder",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "winningAction",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "bidId",
          "type": "uint256"
        }
      ],
      "name": "cancelBid",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "name": "checkActiveAuction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "startTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endTokenId",
          "type": "uint256"
        }
      ],
      "name": "checkAuctionInRange",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "countActiveAuction",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "deposits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "key",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "erc721Token",
      "outputs": [
        {
          "internalType": "contract IERC721",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "finalizeAuction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "finalizeAuctionByLevica",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "name": "getActiveAuction",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "budget",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tentativeBid",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "budgetProvider",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "internalType": "struct IERC721Auction.Auction",
              "name": "auction",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "bidId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "bidder",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "winningAction",
                  "type": "uint8"
                }
              ],
              "internalType": "struct IERC721Auction.Bid",
              "name": "maxBid",
              "type": "tuple"
            }
          ],
          "internalType": "struct IERC721Auction.AuctionWithMaxBid[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getAllBids",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "bidId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "bidder",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "winningAction",
              "type": "uint8"
            }
          ],
          "internalType": "struct IERC721Auction.Bid[]",
          "name": "bidsList",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "startTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endTokenId",
          "type": "uint256"
        }
      ],
      "name": "getAuctionInRange",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "budget",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tentativeBid",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "budgetProvider",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "internalType": "struct IERC721Auction.Auction",
              "name": "auction",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "bidId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "bidder",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "winningAction",
                  "type": "uint8"
                }
              ],
              "internalType": "struct IERC721Auction.Bid",
              "name": "maxBid",
              "type": "tuple"
            }
          ],
          "internalType": "struct IERC721Auction.AuctionWithMaxBid[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "bidder",
          "type": "address"
        }
      ],
      "name": "getBidId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getExtraDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaxTokenID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_erc20TokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_erc721TokenAddress",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "isTokenListed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "key2deposits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "key2maxDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "keyDepositor2deposits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "key",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "startIdx",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "listDepositsByKey",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "key",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "depositor",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct IAnimaDepositManager.DepositInfo[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "listeners",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "key",
          "type": "uint256"
        }
      ],
      "name": "maxDepositByKey",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "depositId",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxTokenId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numDeposits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "key",
          "type": "uint256"
        }
      ],
      "name": "numDepositsByKey",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bidAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "requestShard",
          "type": "bool"
        }
      ],
      "name": "placeBid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bidAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "winningAction",
          "type": "uint8"
        }
      ],
      "name": "placeBidEx",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "resetListener",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "resetTentativeBid",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "roles",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "budgetProvider",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "setBudget",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "setListener",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "gainOrLose",
          "type": "bool"
        }
      ],
      "name": "setRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "role",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "setRoleManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bidId",
          "type": "uint256"
        }
      ],
      "name": "setTentativeBid",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addr",
          "type": "address"
        }
      ],
      "name": "setWinningBidCollector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "key",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "transferTo",
          "type": "address"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "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": "winningBidCollector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a060405230608052348015601357600080fd5b50608051615ead61004b60003960008181610d6f01528181610db8015281816114450152818161148501526115180152615ead6000f3fe6080604052600436106103a25760003560e01c806390f7f5cd116101e7578063bbd4e8c91161010d578063e8083863116100a0578063efc3225f1161006f578063efc3225f14610c4f578063f2fde38b14610c6f578063f9a1f96914610c8f578063fa5f2d2f14610caf57600080fd5b8063e808386314610bc2578063e8b58c9514610be2578063e9060b2f14610c0f578063ebde00bd14610c2f57600080fd5b8063cb16e876116100dc578063cb16e87614610b29578063dcc4b8c014610b49578063e570fc4414610b82578063e7ed057e14610ba257600080fd5b8063bbd4e8c914610abf578063bbec566614610ad4578063c68c74fb14610af4578063c90bd04714610b1457600080fd5b8063a6cb27de11610185578063b02c43d011610154578063b02c43d0146109fb578063b6a3523814610a3e578063b7ee6deb14610a5e578063bb56873f14610a7e57600080fd5b8063a6cb27de14610979578063a7a3d16e1461098e578063adcd905b146109ae578063adf35395146109ce57600080fd5b80639703ef35116101c15780639703ef35146108dd5780639b83cddc146108fd578063a05f8fdb1461092c578063a528ff831461094c57600080fd5b806390f7f5cd1461086c57806391ba317a14610899578063957a867c146108af57600080fd5b806355dbfa13116102cc5780637890a5d91161026a5780638831bb0c116102395780638831bb0c146107eb578063885e71511461080b5780638a3784a61461082e5780638da5cb5b1461084e57600080fd5b80637890a5d914610748578063790d8596146107685780637cec25e4146107885780637ef379f4146107cb57600080fd5b80635f0bb920116102a65780635f0bb920146106c65780635f2d6bcd146106db5780636469986514610713578063715018a61461073357600080fd5b806355dbfa1314610622578063571a26a01461064f5780635da544ad146106a657600080fd5b806337c99a3c11610344578063485cc95511610313578063485cc955146105ba5780634e0ad88d146105da5780634f1ef286146105fa57806352d1902d1461060d57600080fd5b806337c99a3c146104c057806339f257a0146104ed5780633fd16c56146105025780634423c5f11461052f57600080fd5b80631df870b7116103805780631df870b714610449578063203b1b2e1461046b5780632be072b5146104805780633659cfe6146104a057600080fd5b806303fd2a45146103a75780630627c78e146103d357806306a93d2414610419575b600080fd5b3480156103b357600080fd5b506103bc600481565b60405160ff90911681526020015b60405180910390f35b3480156103df57600080fd5b5061040b6103ee366004615405565b60cb60209081526000928352604080842090915290825290205481565b6040519081526020016103ca565b34801561042557600080fd5b50610439610434366004615435565b610ccf565b60405190151581526020016103ca565b34801561045557600080fd5b50610469610464366004615496565b610cec565b005b34801561047757600080fd5b5060dd5461040b565b34801561048c57600080fd5b5061046961049b3660046154ec565b610d3b565b3480156104ac57600080fd5b506104696104bb3660046154ec565b610d65565b3480156104cc57600080fd5b506104e06104db366004615509565b610e4d565b6040516103ca9190615564565b3480156104f957600080fd5b506103bc600381565b34801561050e57600080fd5b5061040b61051d366004615435565b600090815260cd602052604090205490565b34801561053b57600080fd5b5061058661054a366004615435565b60d8602052600090815260409020805460018201546002830154600390930154919290916001600160a01b03811690600160a01b900460ff1685565b604080519586526020860194909452928401919091526001600160a01b0316606083015260ff16608082015260a0016103ca565b3480156105c657600080fd5b506104696105d53660046155bc565b61100f565b3480156105e657600080fd5b506104696105f5366004615509565b61113c565b610469610608366004615678565b61143b565b34801561061957600080fd5b5061040b61150b565b34801561062e57600080fd5b5061040b61063d366004615435565b60e06020526000908152604090205481565b34801561065b57600080fd5b5061058661066a366004615435565b60d9602052600090815260409020805460018201546002830154600390930154919290916001600160a01b03811690600160a01b900460ff1685565b3480156106b257600080fd5b5061040b6106c13660046156e9565b6115be565b3480156106d257600080fd5b5060de5461040b565b3480156106e757600080fd5b5060dc546106fb906001600160a01b031681565b6040516001600160a01b0390911681526020016103ca565b34801561071f57600080fd5b5061040b61072e366004615509565b6117db565b34801561073f57600080fd5b5061046961180c565b34801561075457600080fd5b50610469610763366004615435565b611820565b34801561077457600080fd5b5061040b610783366004615435565b611943565b34801561079457600080fd5b5061040b6107a3366004615405565b600091825260cb602090815260408084206001600160a01b0393909316845291905290205490565b3480156107d757600080fd5b506104696107e6366004615717565b611964565b3480156107f757600080fd5b50610469610806366004615761565b611977565b34801561081757600080fd5b5061040b610826366004615405565b600092915050565b34801561083a57600080fd5b5060cc546106fb906001600160a01b031681565b34801561085a57600080fd5b506097546001600160a01b03166106fb565b34801561087857600080fd5b5061040b610887366004615435565b60cd6020526000908152604090205481565b3480156108a557600080fd5b5061040b60dd5481565b3480156108bb57600080fd5b506108cf6108ca366004615435565b611d07565b6040516103ca929190615799565b3480156108e957600080fd5b506104696108f8366004615435565b611ddd565b34801561090957600080fd5b50610439610918366004615435565b600090815260d96020526040902054151590565b34801561093857600080fd5b506104e0610947366004615509565b612056565b34801561095857600080fd5b5061096c610967366004615435565b612226565b6040516103ca91906157b5565b34801561098557600080fd5b506103bc600281565b34801561099a57600080fd5b506104696109a9366004615810565b612343565b3480156109ba57600080fd5b506104696109c93660046154ec565b612385565b3480156109da57600080fd5b506109ee6109e936600461582b565b6125bc565b6040516103ca9190615857565b348015610a0757600080fd5b50610a1b610a16366004615435565b6127d3565b604080519384526001600160a01b039092166020840152908201526060016103ca565b348015610a4a57600080fd5b50610469610a59366004615509565b612812565b348015610a6a57600080fd5b50610469610a79366004615509565b612b84565b348015610a8a57600080fd5b506106fb610a993660046158b1565b805160208183018101805160da825292820191909301209152546001600160a01b031681565b348015610acb57600080fd5b5061040b612bf3565b348015610ae057600080fd5b50610469610aef366004615509565b612c0a565b348015610b0057600080fd5b50610469610b0f3660046158f9565b612c4b565b348015610b2057600080fd5b506103bc600181565b348015610b3557600080fd5b50610469610b44366004615955565b612dfc565b348015610b5557600080fd5b50610b69610b64366004615435565b613140565b6040516001600160e01b031990911681526020016103ca565b348015610b8e57600080fd5b50610469610b9d3660046159be565b613177565b348015610bae57600080fd5b5060df546106fb906001600160a01b031681565b348015610bce57600080fd5b50610469610bdd366004615435565b6131ab565b348015610bee57600080fd5b5061040b610bfd366004615435565b600090815260ca602052604090205490565b348015610c1b57600080fd5b506104e0610c2a3660046159be565b613276565b348015610c3b57600080fd5b50610469610c4a3660046159ff565b613343565b348015610c5b57600080fd5b506106fb610c6a366004615aa2565b6135f9565b348015610c7b57600080fd5b50610469610c8a3660046154ec565b613631565b348015610c9b57600080fd5b5061040b610caa366004615acc565b6136a7565b348015610cbb57600080fd5b50610469610cca366004615435565b6138ab565b600080610cdb83613baf565b6001600160a01b0316141592915050565b610cf4613c26565b8060da8484604051610d07929190615b00565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b610d43613c26565b60df80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610db65760405162461bcd60e51b8152600401610dad90615b10565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610dff600080516020615e31833981519152546001600160a01b031690565b6001600160a01b031614610e255760405162461bcd60e51b8152600401610dad90615b5c565b610e2e81613c80565b60408051600080825260208201909252610e4a91839190613c88565b50565b60de546060908310610e625760009150610e86565b60de54610e6f8385615bbe565b1115610e865760de54610e83908490615bd1565b91505b6000826001600160401b03811115610ea057610ea06155ea565b604051908082528060200260200182016040528015610ed957816020015b610ec661535e565b815260200190600190039081610ebe5790505b50905060005b8381101561100557600060de86610ef581615be4565b975081548110610f0757610f07615bfd565b6000918252602080832091909101546040805182855260d9845281852060e082018352805482840190815260018201546060840152600282015460808401526003909101546001600160a01b03811660a0840152600160a01b900460ff1660c0830152815282855260cd845290842054919450929183019160d89181526020808201929092526040908101600020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b0381166060830152600160a01b900460ff16608082015290528351849084908110610ff157610ff1615bfd565b602090810291909101015250600101610edf565b5090505b92915050565b600054610100900460ff161580801561102f5750600054600160ff909116105b806110495750303b158015611049575060005460ff166001145b6110ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610dad565b6000805460ff1916600117905580156110cf576000805461ff0019166101001790555b6110d7613df3565b6110df613e1a565b6110e883613e49565b6110f182613f3f565b8015611137576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61114582610ccf565b1561118a5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e206973207374696c6c2061637469766560581b6044820152606401610dad565b600082815260d960205260409020600390810154600160a01b900460ff1610156111d157600082815260d960205260409020600301805460ff60a01b1916600360a01b1790555b600082815260ca602052604081205b8054158015906111ef57508282105b156113ce578054600090829061120790600190615bd1565b8154811061121757611217615bfd565b60009182526020808320919091015480835260d88252604092839020835160a08101855281548152600182015493810184905260028201549481018590526003909101546001600160a01b03811660608301819052600160a01b90910460ff1660808301529194509261128c929190816140ea565b156113c757631f8e6d4760e01b600090815260db6020527f6cf18b1154c1c08f1ba71d4ce7e67dc7376f0573f20117b99f208dd9dc920610905b815481101561136b578181815481106112e1576112e1615bfd565b600091825260209182902001546060850151918501516040808701519051631f8e6d4760e01b81526001600160a01b0390931693631f8e6d479361132d93919290600190600401615c13565b600060405180830381600087803b15801561134757600080fd5b505af115801561135b573d6000803e3d6000fd5b5050600190920191506112c69050565b508461137681615be4565b95505081606001516001600160a01b031682602001517f87ad69cfa5e1e84e7c0b51e5c2aff751e18efd03a42868266cdc681d81b6079a856040516113bd91815260200190565b60405180910390a3505b50506111e0565b805460000361140257600084815260d960205260409020600301805460ff60a01b1916600160a21b179055611402846143c4565b6040518281527f514847ede4c9eeab05c7fdf8e7c7c4553e673df5b1d75c699bcddaef5dc61b589060200160405180910390a150505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114835760405162461bcd60e51b8152600401610dad90615b10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114cc600080516020615e31833981519152546001600160a01b031690565b6001600160a01b0316146114f25760405162461bcd60e51b8152600401610dad90615b5c565b6114fb82613c80565b61150782826001613c88565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115ab5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610dad565b50600080516020615e3183398151915290565b60006040518060400160405280600c81526020016b2ba424aa22afa124a22222a960a11b81525060006001600160a01b031660da826040516116009190615c5f565b908152604051908190036020019020546001600160a01b031614806116a4575060da816040516116309190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190615c7b565b6116c05760405162461bcd60e51b8152600401610dad90615c98565b604080518082018252600c81526b212620a1a5afa124a22222a960a11b6020820152905160009060da906116f5908490615c5f565b908152604051908190036020019020546001600160a01b0316148061179b575060da816040516117259190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190615c7b565b155b6117b75760405162461bcd60e51b8152600401610dad90615ce4565b6117cf8686866117c85760006144bd565b60016144bd565b92505b50509392505050565b60ca60205281600052604060002081815481106117f757600080fd5b90600052602060002001600091509150505481565b611814613c26565b61181e60006149fb565b565b60dc546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188d9190615d25565b6001600160a01b031614604051806040016040528060118152602001702737ba1030903a37b5b2b71037bbb732b960791b815250906118df5760405162461bcd60e51b8152600401610dad9190615d42565b5060df546001600160a01b03166119385760405162461bcd60e51b815260206004820152601a60248201527f6d6179206e6f742066696e616c697a65206279206c65766963610000000000006044820152606401610dad565b610e4a816000612dfc565b60de818154811061195357600080fd5b600091825260209091200154905081565b611970848484846140ea565b5050505050565b604080518082018252600f81526e212aa223a2aa2fa82927ab24a222a960891b6020820152905160009060da906119af908490615c5f565b908152604051908190036020019020546001600160a01b03161480611a53575060da816040516119df9190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015611a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a539190615c7b565b611a6f5760405162461bcd60e51b8152600401610dad90615c98565b60008211611acf5760405162461bcd60e51b815260206004820152602760248201527f42756467657420616d6f756e74206d7573742062652067726561746572207468604482015266616e207a65726f60c81b6064820152608401610dad565b600084815260d960205260409020600301546002600160a01b90910460ff16108015611aff5750611aff84610ccf565b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b81525090611b4f5760405162461bcd60e51b8152600401610dad9190615d42565b50600084815260d96020526040902060010154821015611bb15760405162461bcd60e51b815260206004820152601b60248201527f4d6179206e6f74206465637265617365207468652062756467657400000000006044820152606401610dad565b611bba84614a4d565b600084815260d9602052604090208481556001808201849055600390910180546001600160a01b0319166001600160a01b038616179081905560ff600160a01b909104161015611c2757600084815260d960205260409020600301805460ff60a01b1916600160a01b1790555b60dd54841115611c375760dd8490555b6267585160e71b600090815260db6020527fd6d60453638d132e7dd5354555c754d95c7dd70c86cfa94049fda5877cba93f5905b8154811015611cff57818181548110611c8657611c86615bfd565b6000918252602090912001546040516267585160e71b815260048101889052602481018690526001600160a01b03909116906333ac288090604401600060405180830381600087803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b505060019092019150611c6b9050565b505050505050565b611d0f615383565b611d17615383565b600083815260d960209081526040808320815160a081018352815481526001820154818501526002820154818401526003909101546001600160a01b0381166060830152600160a01b900460ff16608082015286845260cd90925282205490935060d8919081526020808201929092526040908101600020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b0381166060830152600160a01b900460ff166080820152919391925050565b600081815260d86020526040902060038101546001600160a01b03163314611e525760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920746865206269646465722063616e2063616e63656c2074686520626044820152611a5960f21b6064820152608401610dad565b6001810154600090815260d96020526040902060020154829003611eb85760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742063616e63656c207468652074656e74617469766520626964006044820152606401610dad565b611ecc8160010154338360020154336140ea565b15611ff457631f8e6d4760e01b600090815260db6020527f6cf18b1154c1c08f1ba71d4ce7e67dc7376f0573f20117b99f208dd9dc920610905b8154811015611fa857818181548110611f2157611f21615bfd565b6000918252602090912001546001848101546002860154604051631f8e6d4760e01b81526001600160a01b0390941693631f8e6d4793611f6a9333939092909190600401615c13565b600060405180830381600087803b158015611f8457600080fd5b505af1158015611f98573d6000803e3d6000fd5b505060019092019150611f069050565b50600382015460018301546040518581526001600160a01b03909216917f87ad69cfa5e1e84e7c0b51e5c2aff751e18efd03a42868266cdc681d81b6079a9060200160405180910390a3505b6120018160010154610ccf565b15801561201f57506001810154600090815260ca6020526040902054155b1561150757600181018054600090815260d960205260409020600301805460ff60a01b1916600160a21b17905554611507906143c4565b6060600060dd5483111561206a5760dd5492505b835b8381116120a15761207c81614aa4565b1561208f578161208b81615be4565b9250505b8061209981615be4565b91505061206c565b506000816001600160401b038111156120bc576120bc6155ea565b6040519080825280602002602001820160405280156120f557816020015b6120e261535e565b8152602001906001900390816120da5790505b5090506000855b85811161221b5761210c81614aa4565b156122095760408051600083815260d9602090815283822060e084018552805484860190815260018201546060860152600282015460808601526003909101546001600160a01b03811660a0860152600160a01b900460ff1660c0850152835284825260cd815292812054919283019160d8919081526020808201929092526040908101600020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b0381166060830152600160a01b900460ff166080820152905283518490849081106121ef576121ef615bfd565b6020026020010181905250818061220590615be4565b9250505b8061221381615be4565b9150506120fc565b509095945050505050565b600081815260ca602052604081208054606092906001600160401b03811115612251576122516155ea565b60405190808252806020026020018201604052801561228a57816020015b612277615383565b81526020019060019003908161226f5790505b50905060005b825481101561233b5760d860008483815481106122af576122af615bfd565b600091825260208083209091015483528281019390935260409182019020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b038116606083015260ff600160a01b909104166080820152825183908390811061232857612328615bfd565b6020908102919091010152600101612290565b509392505050565b61234b613c26565b6001600160e01b03198116633bf4472f60e11b14610e4a576001600160e01b03198116600090815260db60205260408120610e4a916153be565b61238d613c26565b6040516301ffc9a760e01b8152633bf4472f60e11b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc9190615c7b565b1561247457633bf4472f60e11b600090815260db6020527f4b88b10da8f7aa441532046b0abacdd6d52446dae11265856c4299fa28387786805483929061244557612445615bfd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60005b60d75481101561150757816001600160a01b03166301ffc9a760d783815481106124a3576124a3615bfd565b90600052602060002090600891828204019190066004029054906101000a900460e01b6040518263ffffffff1660e01b81526004016124f291906001600160e01b031991909116815260200190565b602060405180830381865afa15801561250f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125339190615c7b565b156125b45760db600060d7838154811061254f5761254f615bfd565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b0319168352828101939093526040909101812080546001810182559082529190200180546001600160a01b0319166001600160a01b0384161790555b600101612477565b600083815260ca6020526040902080546060919080851061261f5760405162461bcd60e51b815260206004820152601b60248201527f537461727420696e646578206973206f7574206f662072616e676500000000006044820152606401610dad565b6000841161266f5760405162461bcd60e51b815260206004820152601f60248201527f4c696d6974206d7573742062652067726561746572207468616e207a65726f006044820152606401610dad565b600061267b8587615bbe565b9050818111156126885750805b60006126948783615bd1565b90506000816001600160401b038111156126b0576126b06155ea565b60405190808252806020026020018201604052801561270e57816020015b6126fb60405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b8152602001906001900390816126ce5790505b50905060005b828110156127c457600086612729838c615bbe565b8154811061273957612739615bfd565b9060005260206000200154905060c9818154811061275957612759615bfd565b60009182526020918290206040805160608101825260039093029091018054835260018101546001600160a01b0316938301939093526002909201549181019190915283518490849081106127b0576127b0615bfd565b602090810291909101015250600101612714565b509450505050505b9392505050565b60c981815481106127e357600080fd5b60009182526020909120600390910201805460018201546002909201549092506001600160a01b039091169083565b604080518082018252600581526420a226a4a760d91b6020820152905160009060da90612840908490615c5f565b908152604051908190036020019020546001600160a01b031614806128e4575060da816040516128709190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa1580156128c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e49190615c7b565b6129005760405162461bcd60e51b8152600401610dad90615c98565b600061290b84613baf565b600085815260d96020526040902060030154909150600160a01b900460ff16600114801561294157506001600160a01b03811615155b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b815250906129915760405162461bcd60e51b8152600401610dad9190615d42565b50600083815260d86020908152604091829020825160a081018452815481526001820154928101929092526002810154928201929092526003909101546001600160a01b0380821660608401819052600160a01b90920460ff16608084015283169003612a4b5760405162461bcd60e51b815260206004820152602260248201527f746f6b656e206f776e6572206d61796e6f742077696e2074686520617563746960448201526137b760f11b6064820152608401610dad565b600085815260d960209081526040822060028101879055600301805460ff60a01b1916600160a11b179055634d0b92f560e11b825260db90527f076860097f15b95a12ed9b9b50f364baf4c96bd04b0d38983e18f0af20a78aed905b8154811015612b4e57818181548110612ac257612ac2615bfd565b60009182526020909120015460608401516040808601519051634d0b92f560e11b81526001600160a01b039283166004820152602481018b90526044810191909152911690639a1725ea90606401600060405180830381600087803b158015612b2a57600080fd5b505af1158015612b3e573d6000803e3d6000fd5b505060019092019150612aa79050565b50604051859087907f9630dce4ffafcbb85fc65776a5a96ff1bb46c93340f0d34725adbd91941edcc590600090a3505050505050565b60005b60de5483108015612b9757508181105b1561113757600060de84612baa81615be4565b955081548110612bbc57612bbc615bfd565b90600052602060002001549050612bd281614aa4565b15612be057612be081614b01565b5080612beb81615be4565b915050612b87565b60c954600090612c0590600190615bd1565b905090565b60dd54811115612c19575060dd545b815b81811161113757612c2b81614aa4565b15612c3957612c3981614b01565b80612c4381615be4565b915050612c1b565b604080518082018252600581526420a226a4a760d91b6020820152905160009060da90612c79908490615c5f565b908152604051908190036020019020546001600160a01b03161480612d1d575060da81604051612ca99190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1d9190615c7b565b612d395760405162461bcd60e51b8152600401610dad90615c98565b60006001600160a01b031660da8686604051612d56929190615b00565b908152604051908190036020019020546001600160a01b0316146119705760da8585604051612d86929190615b00565b9081526040519081900360200181205463ab01b46960e01b82526001600160a01b0385811660048401528415156024840152169063ab01b46990604401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b505050505050505050565b600082815260d96020526040902060030154600160a01b900460ff166002148015612e2b5750612e2b82610ccf565b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b81525090612e7b5760405162461bcd60e51b8152600401610dad9190615d42565b5060dc546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b5050633bf4472f60e11b600090815260db6020527f4b88b10da8f7aa441532046b0abacdd6d52446dae11265856c4299fa28387786805491935091508290612f2c57612f2c615bfd565b60009182526020808320919091015485835260d982526040808420600290810154855260d8845293819020815160a0810183528154815260018201549481019490945293840154908301526003909201546001600160a01b038082166060840152600160a01b90910460ff166080830152909116915081156130935760dc5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018790529091169063095ea7b390604401600060405180830381600087803b158015612ff657600080fd5b505af115801561300a573d6000803e3d6000fd5b505050606082015160408084015160808501519151633bf4472f60e11b81526001600160a01b03938416600482015260248101899052604481019190915260ff909116606482015290841691506377e88e5e90608401600060405180830381600087803b15801561307a57600080fd5b505af115801561308e573d6000803e3d6000fd5b505050505b6130bd8482606001518360400151866130b75760df546001600160a01b03166140ea565b336140ea565b5080606001516001600160a01b0316847f4d9113a1377d665eaa1f9168a9c9080f2e488cb820b10149de3d6d2e0f2780c7856130fa576000613100565b83604001515b60405190815260200160405180910390a3505050600090815260d9602052604081206002810191909155600301805460ff60a01b1916600160a01b179055565b60d7818154811061315057600080fd5b9060005260206000209060089182820401919006600402915054906101000a900460e01b81565b60005b81811015611137576131a383838381811061319757613197615bfd565b90506020020135611ddd565b60010161317a565b60dc546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa1580156131f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132189190615d25565b6001600160a01b031614604051806040016040528060118152602001702737ba1030903a37b5b2b71037bbb732b960791b8152509061326a5760405162461bcd60e51b8152600401610dad9190615d42565b50610e4a816001612dfc565b60606000826001600160401b03811115613292576132926155ea565b6040519080825280602002602001820160405280156132cb57816020015b6132b861535e565b8152602001906001900390816132b05790505b50905060005b83811015611005576132fa8585838181106132ee576132ee615bfd565b90506020020135611d07565b83838151811061330c5761330c615bfd565b602002602001015160000184848151811061332957613329615bfd565b6020908102919091018101510191909152526001016132d1565b604080518082018252600c81526b2ba424aa22afa124a22222a960a11b6020820152905160009060da90613378908490615c5f565b908152604051908190036020019020546001600160a01b0316148061341c575060da816040516133a89190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190615c7b565b6134385760405162461bcd60e51b8152600401610dad90615c98565b604080518082018252600c81526b212620a1a5afa124a22222a960a11b6020820152905160009060da9061346d908490615c5f565b908152604051908190036020019020546001600160a01b03161480613513575060da8160405161349d9190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa1580156134ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135119190615c7b565b155b61352f5760405162461bcd60e51b8152600401610dad90615ce4565b868514801561353d57508683145b6135895760405162461bcd60e51b815260206004820152601860248201527f4172726179206c656e67746873206d757374206d6174636800000000000000006044820152606401610dad565b60005b87811015612df1576135f08989838181106135a9576135a9615bfd565b905060200201358888848181106135c2576135c2615bfd565b905060200201358787858181106135db576135db615bfd565b90506020020160208101906106c19190615d75565b5060010161358c565b60db602052816000526040600020818154811061361557600080fd5b6000918252602090912001546001600160a01b03169150829050565b613639613c26565b6001600160a01b03811661369e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dad565b610e4a816149fb565b60006040518060400160405280600c81526020016b2ba424aa22afa124a22222a960a11b81525060006001600160a01b031660da826040516136e99190615c5f565b908152604051908190036020019020546001600160a01b0316148061378d575060da816040516137199190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015613769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061378d9190615c7b565b6137a95760405162461bcd60e51b8152600401610dad90615c98565b604080518082018252600c81526b212620a1a5afa124a22222a960a11b6020820152905160009060da906137de908490615c5f565b908152604051908190036020019020546001600160a01b03161480613884575060da8160405161380e9190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa15801561385e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138829190615c7b565b155b6138a05760405162461bcd60e51b8152600401610dad90615ce4565b6117cf8686866144bd565b604080518082018252600581526420a226a4a760d91b6020820152905160009060da906138d9908490615c5f565b908152604051908190036020019020546001600160a01b0316148061397d575060da816040516139099190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d9190615c7b565b6139995760405162461bcd60e51b8152600401610dad90615c98565b600082815260d96020526040902060030154600160a01b900460ff16600214613a215760405162461bcd60e51b815260206004820152603460248201527f5468652074656e74617469766520626964206f66207468652061756374696f6e604482015273081b585e481b9bdd0818994818d85b98d95b195960621b6064820152608401610dad565b600082815260d9602090815260408083206002808201805480875260d88652848720855160a0810187528154815260018201548189015293810154958401959095526003948501546001600160a01b038116606085015260ff600160a01b918290041660808501529187905593909201805460ff60a01b1916909217909155639815db5b60e01b845260db909252917f39f88711328ce3bec61f01ff9e88569cf167623ee46137f5758796a82a0604bd905b8154811015613b7a57818181548110613aee57613aee615bfd565b60009182526020909120015460608401516040808601519051639815db5b60e01b81526001600160a01b039283166004820152602481018a90526044810191909152911690639815db5b90606401600060405180830381600087803b158015613b5657600080fd5b505af1158015613b6a573d6000803e3d6000fd5b505060019092019150613ad39050565b50604051839086907fb3cf65e8d1186020c815ee72cf4f860052415b0c05caeda8990171928c2d9c8590600090a35050505050565b60dc546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa925050508015613c15575060408051601f3d908101601f19168201909252613c1291810190615d25565b60015b61100957506000919050565b919050565b6097546001600160a01b0316331461181e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dad565b610e4a613c26565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613cbb5761113783614bba565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613d15575060408051601f3d908101601f19168201909252613d1291810190615d92565b60015b613d785760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610dad565b600080516020615e318339815191528114613de75760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610dad565b50611137838383614c56565b600054610100900460ff1661181e5760405162461bcd60e51b8152600401610dad90615dab565b600054610100900460ff16613e415760405162461bcd60e51b8152600401610dad90615dab565b61181e614c7b565b600054610100900460ff16613e705760405162461bcd60e51b8152600401610dad90615dab565b60cc80546001600160a01b03199081166001600160a01b03938416179091556040805160608101825260008082526020820181815292820181815260c98054600181018255925291517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2860039092029182015591517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d298301805490941694169390931790915590517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2a90910155565b600054610100900460ff16613f665760405162461bcd60e51b8152600401610dad90615dab565b60dc80546001600160a01b039092166001600160a01b031990921691909117905560db6020527f4b88b10da8f7aa441532046b0abacdd6d52446dae11265856c4299fa283877868054600190810190915560d780548083018255600082905260088082047f8a012a6de2943a5aa4d77acf5e695d4456760a3f1f30a5d6dc2079599187a071908101805463297400ac60046007968716810261010090810a92830263ffffffff93840219909416939093179093558654808901885585810485018054631f8e6d479289168602850a92830292840219169190911790558654808901885585810485018054639a1725ea9289168602850a92830292840219169190911790558654808901885585810485018054639815db5b9289168602850a92830292840219169190911790558654808901885585810485018054639ec0902c9289168602850a9283029284021916919091179055865497880190965592860490910180546333ac28809690941690910290910a938402939092021916919091179055565b600080831161413b5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610dad565b6001600160a01b03841661418d5760405162461bcd60e51b8152602060048201526019602482015278496e76616c6964206465706f7369746f72206164647265737360381b6044820152606401610dad565b6001600160a01b0382166141e35760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207472616e73666572206164647265737300000000000000006044820152606401610dad565b600085815260cb602090815260408083206001600160a01b0388168452909152812054908190036142655760405162461bcd60e51b815260206004820152602660248201527f4e6f206465706f73697420666f756e6420666f72206465706f7369746f7220616044820152656e64206b657960d01b6064820152608401610dad565b600060c9828154811061427a5761427a615bfd565b9060005260206000209060030201905084816002015410156142de5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74206465706f73697420616d6f756e7400000000006044820152606401610dad565b848160020160008282546142f29190615bd1565b9091555050600281015460000361430e5761430e828888614cab565b600087815260cd602052604090205482900361433d5761432d87614d9a565b600088815260cd60205260409020555b60cc5460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018890529091169063a9059cbb906044016020604051808303816000875af1158015614390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b49190615c7b565b506001925050505b949350505050565b600081815260e0602052604090205480156115075760de5481146144815760de8054600091906143f690600190615bd1565b8154811061440657614406615bfd565b9060005260206000200154905060de600160de805490506144279190615bd1565b8154811061443757614437615bfd565b906000526020600020015460de6001846144519190615bd1565b8154811061446157614461615bfd565b600091825260208083209091019290925591825260e09052604090208190555b60de80548061449257614492615df6565b60008281526020808220830160001990810183905590920190925583825260e0905260408120555050565b6000808311604051806060016040528060248152602001615e0d60249139906144f95760405162461bcd60e51b8152600401610dad9190615d42565b50600061450585613baf565b600086815260d960205260409020600301549091506002600160a01b90910460ff1610801561453c57506001600160a01b03811615155b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b8152509061458c5760405162461bcd60e51b8152600401610dad9190615d42565b50336001600160a01b038216036145f35760405162461bcd60e51b815260206004820152602560248201527f6d6179206e6f7420706c6163652062696420746f2073656c66206f776e6564206044820152643a37b5b2b760d91b6064820152608401610dad565b600085815260cb60209081526040808320338452909152902054801561479d57614643863360c9848154811061462b5761462b615bfd565b906000526020600020906003020160020154336140ea565b50631f8e6d4760e01b600090815260db6020527f6cf18b1154c1c08f1ba71d4ce7e67dc7376f0573f20117b99f208dd9dc920610905b81548110156147465781818154811061469457614694615bfd565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316631f8e6d47338a60c987815481106146d5576146d5615bfd565b90600052602060002090600302016002015460006040518563ffffffff1660e01b81526004016147089493929190615c13565b600060405180830381600087803b15801561472257600080fd5b505af1158015614736573d6000803e3d6000fd5b5050600190920191506146799050565b50600082815260d860209081526040918290206003015491518481526001600160a01b039092169189917f87ad69cfa5e1e84e7c0b51e5c2aff751e18efd03a42868266cdc681d81b6079a910160405180910390a3505b60006147aa873388614e3c565b6040805160a08101825282815260208082018b81528284018b8152336060850190815260ff808d1660808701908152600089815260d887528881209751885594516001880155925160028701559051600390950180549251909116600160a01b026001600160a81b03199092166001600160a01b039590951694909417179092558a825260d9905290812054919250036148d9576040805160a08101825288815260006020808301828152838501838152606085018481526001608087018181528f875260d99095529690942094518555905194840194909455925160028301555160039091018054925160ff16600160a01b026001600160a81b03199093166001600160a01b03929092169190911791909117905560dd548711156148d05760dd8790555b6148d987614a4d565b630a5d002b60e21b600090815260db6020527f7ec665ac93a0c8dbec36ff555c3697fad662364b62b4d6d94e8e7e503d6591b3905b81548110156149a95781818154811061492957614929615bfd565b600091825260209091200154604051630a5d002b60e21b8152336004820152602481018b9052604481018a90526001600160a01b039091169063297400ac90606401600060405180830381600087803b15801561498557600080fd5b505af1158015614999573d6000803e3d6000fd5b50506001909201915061490e9050565b50604080518881526020810184905260ff881681830152905133918a917f8f83e84f41594286fcdd91dc68c77fb6b2177c957251725ff397f8b8b3b687029181900360600190a3509695505050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260e060205260408120549003610e4a5760de80546001810182557ffae8130c0619f84b4b44f01b84806f04e82e536d70e05f2356977fa318aecc1a0182905554600082815260e0602052604090205550565b6000614aaf82610ccf565b8015614ad75750600082815260d96020526040902060030154600160a01b900460ff16600111155b8015611009575050600090815260d960205260409020600390810154600160a01b900460ff161090565b6000614b0c82613baf565b600083815260ca602052604081209192505b8154811015614bb457600060c9838381548110614b3d57614b3d615bfd565b906000526020600020015481548110614b5857614b58615bfd565b6000918252602090912060039091020160018101549091506001600160a01b03858116911603614bab5760018101546002820154614ba49187916001600160a01b0390911690816140ea565b5050614bb4565b50600101614b1e565b50505050565b6001600160a01b0381163b614c275760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610dad565b600080516020615e3183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b614c5f836151f7565b600082511180614c6c5750805b1561113757614bb48383615237565b600054610100900460ff16614ca25760405162461bcd60e51b8152600401610dad90615dab565b61181e336149fb565b600082815260cb602090815260408083206001600160a01b0385168452825280832083905584835260ca90915281208054909190614ceb90600190615bd1565b905060005b818111611cff5785838281548110614d0a57614d0a615bfd565b906000526020600020015403614d8857818114614d5d57828281548110614d3357614d33615bfd565b9060005260206000200154838281548110614d5057614d50615bfd565b6000918252602090912001555b82805480614d6d57614d6d615df6565b60019003818190600052602060002001600090559055611cff565b80614d9281615be4565b915050614cf0565b600081815260ca6020526040812081805b8254811015614e34576000838281548110614dc857614dc8615bfd565b90600052602060002001549050600060c98281548110614dea57614dea615bfd565b60009182526020822060039190910201915084818360020154614e0d9190615bbe565b1115614e2957808260020154614e239190615bbe565b94508296505b505050600101614dab565b505050919050565b6000808211614e815760405162461bcd60e51b8152602060048201526011602482015270416d6f756e7420697320746f6f206c6f7760781b6044820152606401610dad565b6001600160a01b038316614ed35760405162461bcd60e51b8152602060048201526019602482015278496e76616c6964206465706f7369746f72206164647265737360381b6044820152606401610dad565b600084815260cb602090815260408083206001600160a01b03871684529091528120549081900361507a5760cc546040516323b872dd60e01b81526001600160a01b03868116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af1158015614f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7b9190615c7b565b50604080516060810182528681526001600160a01b03868116602080840182815284860189815260c9805460018082018355600092835297517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d28600383029081019190915593517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d29850180546001600160a01b031916919098161790965590517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2a909201919091558a815260ca825285812080549586018155815281812090940183905589845260cb8152848420918452529190208190559150615137565b60cc546040516323b872dd60e01b81526001600160a01b03868116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af11580156150d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150f79190615c7b565b508260c9828154811061510c5761510c615bfd565b9060005260206000209060030201600201600082825461512c9190615bbe565b925050819055508091505b600085815260cd60205260409020548281146117d2576000806151728860c9858154811061516757615167615bfd565b506000908152919050565b90508160c9868154811061518857615188615bfd565b9060005260206000209060030201600201546151a49190615bbe565b8160c985815481106151b8576151b8615bfd565b9060005260206000209060030201600201546151d49190615bbe565b10156151ec57600088815260cd602052604090208590555b505050509392505050565b61520081614bba565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606127cc8383604051806060016040528060278152602001615e51602791396060600080856001600160a01b0316856040516152749190615c5f565b600060405180830381855af49150503d80600081146152af576040519150601f19603f3d011682016040523d82523d6000602084013e6152b4565b606091505b50915091506117cf868383876060831561532f578251600003615328576001600160a01b0385163b6153285760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dad565b50816143bc565b6143bc83838151156153445781518083602001fd5b8060405162461bcd60e51b8152600401610dad9190615d42565b6040518060400160405280615371615383565b815260200161537e615383565b905290565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff1681525090565b5080546000825590600052602060002090810190610e4a91905b808211156153ec57600081556001016153d8565b5090565b6001600160a01b0381168114610e4a57600080fd5b6000806040838503121561541857600080fd5b82359150602083013561542a816153f0565b809150509250929050565b60006020828403121561544757600080fd5b5035919050565b60008083601f84011261546057600080fd5b5081356001600160401b0381111561547757600080fd5b60208301915083602082850101111561548f57600080fd5b9250929050565b6000806000604084860312156154ab57600080fd5b83356001600160401b038111156154c157600080fd5b6154cd8682870161544e565b90945092505060208401356154e1816153f0565b809150509250925092565b6000602082840312156154fe57600080fd5b81356127cc816153f0565b6000806040838503121561551c57600080fd5b50508035926020909101359150565b8051825260208082015190830152604080820151908301526060808201516001600160a01b03169083015260809081015160ff16910152565b602080825282518282018190526000918401906040840190835b8181101561221b57835161559384825161552b565b602001516155a460a085018261552b565b5060209390930192610140929092019160010161557e565b600080604083850312156155cf57600080fd5b82356155da816153f0565b9150602083013561542a816153f0565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b0384111561561a5761561a6155ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715615648576156486155ea565b60405283815290508082840185101561566057600080fd5b83836020830137600060208583010152509392505050565b6000806040838503121561568b57600080fd5b8235615696816153f0565b915060208301356001600160401b038111156156b157600080fd5b8301601f810185136156c257600080fd5b6156d185823560208401615600565b9150509250929050565b8015158114610e4a57600080fd5b6000806000606084860312156156fe57600080fd5b833592506020840135915060408401356154e1816156db565b6000806000806080858703121561572d57600080fd5b84359350602085013561573f816153f0565b9250604085013591506060850135615756816153f0565b939692955090935050565b60008060006060848603121561577657600080fd5b833592506020840135615788816153f0565b929592945050506040919091013590565b61014081016157a8828561552b565b6127cc60a083018461552b565b602080825282518282018190526000918401906040840190835b8181101561221b576157e283855161552b565b6020939093019260a092909201916001016157cf565b80356001600160e01b031981168114613c2157600080fd5b60006020828403121561582257600080fd5b6127cc826157f8565b60008060006060848603121561584057600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000918401906040840190835b8181101561221b578351805184526020808201516001600160a01b0316818601526040918201519185019190915290930192606090920191600101615871565b6000602082840312156158c357600080fd5b81356001600160401b038111156158d957600080fd5b8201601f810184136158ea57600080fd5b6143bc84823560208401615600565b6000806000806060858703121561590f57600080fd5b84356001600160401b0381111561592557600080fd5b6159318782880161544e565b9095509350506020850135615945816153f0565b91506040850135615756816156db565b6000806040838503121561596857600080fd5b82359150602083013561542a816156db565b60008083601f84011261598c57600080fd5b5081356001600160401b038111156159a357600080fd5b6020830191508360208260051b850101111561548f57600080fd5b600080602083850312156159d157600080fd5b82356001600160401b038111156159e757600080fd5b6159f38582860161597a565b90969095509350505050565b60008060008060008060608789031215615a1857600080fd5b86356001600160401b03811115615a2e57600080fd5b615a3a89828a0161597a565b90975095505060208701356001600160401b03811115615a5957600080fd5b615a6589828a0161597a565b90955093505060408701356001600160401b03811115615a8457600080fd5b615a9089828a0161597a565b979a9699509497509295939492505050565b60008060408385031215615ab557600080fd5b615abe836157f8565b946020939093013593505050565b600080600060608486031215615ae157600080fd5b8335925060208401359150604084013560ff811681146154e157600080fd5b8183823760009101908152919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561100957611009615ba8565b8181038181111561100957611009615ba8565b600060018201615bf657615bf6615ba8565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b60005b83811015615c56578181015183820152602001615c3e565b50506000910152565b60008251615c71818460208701615c3b565b9190910192915050565b600060208284031215615c8d57600080fd5b81516127cc816156db565b6020808252602c908201527f446f6573206e6f7420686176652070726976696c65676520746f2063616c6c2060408201526b3a343290333ab731ba34b7b760a11b606082015260800190565b60208082526021908201527f426c6f636b65642066726f6d2063616c6c696e67207468652066756e6374696f6040820152603760f91b606082015260800190565b600060208284031215615d3757600080fd5b81516127cc816153f0565b6020815260008251806020840152615d61816040850160208701615c3b565b601f01601f19169190910160400192915050565b600060208284031215615d8757600080fd5b81356127cc816156db565b600060208284031215615da457600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfe42696420616d6f756e74206d7573742062652067726561746572207468616e207a65726f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ad009a9767da84eb8ed22db9fabcee967044fc7c990e813d144cfb42abd36b5b64736f6c634300081b0033",
  "deployedBytecode": "0x6080604052600436106103a25760003560e01c806390f7f5cd116101e7578063bbd4e8c91161010d578063e8083863116100a0578063efc3225f1161006f578063efc3225f14610c4f578063f2fde38b14610c6f578063f9a1f96914610c8f578063fa5f2d2f14610caf57600080fd5b8063e808386314610bc2578063e8b58c9514610be2578063e9060b2f14610c0f578063ebde00bd14610c2f57600080fd5b8063cb16e876116100dc578063cb16e87614610b29578063dcc4b8c014610b49578063e570fc4414610b82578063e7ed057e14610ba257600080fd5b8063bbd4e8c914610abf578063bbec566614610ad4578063c68c74fb14610af4578063c90bd04714610b1457600080fd5b8063a6cb27de11610185578063b02c43d011610154578063b02c43d0146109fb578063b6a3523814610a3e578063b7ee6deb14610a5e578063bb56873f14610a7e57600080fd5b8063a6cb27de14610979578063a7a3d16e1461098e578063adcd905b146109ae578063adf35395146109ce57600080fd5b80639703ef35116101c15780639703ef35146108dd5780639b83cddc146108fd578063a05f8fdb1461092c578063a528ff831461094c57600080fd5b806390f7f5cd1461086c57806391ba317a14610899578063957a867c146108af57600080fd5b806355dbfa13116102cc5780637890a5d91161026a5780638831bb0c116102395780638831bb0c146107eb578063885e71511461080b5780638a3784a61461082e5780638da5cb5b1461084e57600080fd5b80637890a5d914610748578063790d8596146107685780637cec25e4146107885780637ef379f4146107cb57600080fd5b80635f0bb920116102a65780635f0bb920146106c65780635f2d6bcd146106db5780636469986514610713578063715018a61461073357600080fd5b806355dbfa1314610622578063571a26a01461064f5780635da544ad146106a657600080fd5b806337c99a3c11610344578063485cc95511610313578063485cc955146105ba5780634e0ad88d146105da5780634f1ef286146105fa57806352d1902d1461060d57600080fd5b806337c99a3c146104c057806339f257a0146104ed5780633fd16c56146105025780634423c5f11461052f57600080fd5b80631df870b7116103805780631df870b714610449578063203b1b2e1461046b5780632be072b5146104805780633659cfe6146104a057600080fd5b806303fd2a45146103a75780630627c78e146103d357806306a93d2414610419575b600080fd5b3480156103b357600080fd5b506103bc600481565b60405160ff90911681526020015b60405180910390f35b3480156103df57600080fd5b5061040b6103ee366004615405565b60cb60209081526000928352604080842090915290825290205481565b6040519081526020016103ca565b34801561042557600080fd5b50610439610434366004615435565b610ccf565b60405190151581526020016103ca565b34801561045557600080fd5b50610469610464366004615496565b610cec565b005b34801561047757600080fd5b5060dd5461040b565b34801561048c57600080fd5b5061046961049b3660046154ec565b610d3b565b3480156104ac57600080fd5b506104696104bb3660046154ec565b610d65565b3480156104cc57600080fd5b506104e06104db366004615509565b610e4d565b6040516103ca9190615564565b3480156104f957600080fd5b506103bc600381565b34801561050e57600080fd5b5061040b61051d366004615435565b600090815260cd602052604090205490565b34801561053b57600080fd5b5061058661054a366004615435565b60d8602052600090815260409020805460018201546002830154600390930154919290916001600160a01b03811690600160a01b900460ff1685565b604080519586526020860194909452928401919091526001600160a01b0316606083015260ff16608082015260a0016103ca565b3480156105c657600080fd5b506104696105d53660046155bc565b61100f565b3480156105e657600080fd5b506104696105f5366004615509565b61113c565b610469610608366004615678565b61143b565b34801561061957600080fd5b5061040b61150b565b34801561062e57600080fd5b5061040b61063d366004615435565b60e06020526000908152604090205481565b34801561065b57600080fd5b5061058661066a366004615435565b60d9602052600090815260409020805460018201546002830154600390930154919290916001600160a01b03811690600160a01b900460ff1685565b3480156106b257600080fd5b5061040b6106c13660046156e9565b6115be565b3480156106d257600080fd5b5060de5461040b565b3480156106e757600080fd5b5060dc546106fb906001600160a01b031681565b6040516001600160a01b0390911681526020016103ca565b34801561071f57600080fd5b5061040b61072e366004615509565b6117db565b34801561073f57600080fd5b5061046961180c565b34801561075457600080fd5b50610469610763366004615435565b611820565b34801561077457600080fd5b5061040b610783366004615435565b611943565b34801561079457600080fd5b5061040b6107a3366004615405565b600091825260cb602090815260408084206001600160a01b0393909316845291905290205490565b3480156107d757600080fd5b506104696107e6366004615717565b611964565b3480156107f757600080fd5b50610469610806366004615761565b611977565b34801561081757600080fd5b5061040b610826366004615405565b600092915050565b34801561083a57600080fd5b5060cc546106fb906001600160a01b031681565b34801561085a57600080fd5b506097546001600160a01b03166106fb565b34801561087857600080fd5b5061040b610887366004615435565b60cd6020526000908152604090205481565b3480156108a557600080fd5b5061040b60dd5481565b3480156108bb57600080fd5b506108cf6108ca366004615435565b611d07565b6040516103ca929190615799565b3480156108e957600080fd5b506104696108f8366004615435565b611ddd565b34801561090957600080fd5b50610439610918366004615435565b600090815260d96020526040902054151590565b34801561093857600080fd5b506104e0610947366004615509565b612056565b34801561095857600080fd5b5061096c610967366004615435565b612226565b6040516103ca91906157b5565b34801561098557600080fd5b506103bc600281565b34801561099a57600080fd5b506104696109a9366004615810565b612343565b3480156109ba57600080fd5b506104696109c93660046154ec565b612385565b3480156109da57600080fd5b506109ee6109e936600461582b565b6125bc565b6040516103ca9190615857565b348015610a0757600080fd5b50610a1b610a16366004615435565b6127d3565b604080519384526001600160a01b039092166020840152908201526060016103ca565b348015610a4a57600080fd5b50610469610a59366004615509565b612812565b348015610a6a57600080fd5b50610469610a79366004615509565b612b84565b348015610a8a57600080fd5b506106fb610a993660046158b1565b805160208183018101805160da825292820191909301209152546001600160a01b031681565b348015610acb57600080fd5b5061040b612bf3565b348015610ae057600080fd5b50610469610aef366004615509565b612c0a565b348015610b0057600080fd5b50610469610b0f3660046158f9565b612c4b565b348015610b2057600080fd5b506103bc600181565b348015610b3557600080fd5b50610469610b44366004615955565b612dfc565b348015610b5557600080fd5b50610b69610b64366004615435565b613140565b6040516001600160e01b031990911681526020016103ca565b348015610b8e57600080fd5b50610469610b9d3660046159be565b613177565b348015610bae57600080fd5b5060df546106fb906001600160a01b031681565b348015610bce57600080fd5b50610469610bdd366004615435565b6131ab565b348015610bee57600080fd5b5061040b610bfd366004615435565b600090815260ca602052604090205490565b348015610c1b57600080fd5b506104e0610c2a3660046159be565b613276565b348015610c3b57600080fd5b50610469610c4a3660046159ff565b613343565b348015610c5b57600080fd5b506106fb610c6a366004615aa2565b6135f9565b348015610c7b57600080fd5b50610469610c8a3660046154ec565b613631565b348015610c9b57600080fd5b5061040b610caa366004615acc565b6136a7565b348015610cbb57600080fd5b50610469610cca366004615435565b6138ab565b600080610cdb83613baf565b6001600160a01b0316141592915050565b610cf4613c26565b8060da8484604051610d07929190615b00565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b610d43613c26565b60df80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610db65760405162461bcd60e51b8152600401610dad90615b10565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610dff600080516020615e31833981519152546001600160a01b031690565b6001600160a01b031614610e255760405162461bcd60e51b8152600401610dad90615b5c565b610e2e81613c80565b60408051600080825260208201909252610e4a91839190613c88565b50565b60de546060908310610e625760009150610e86565b60de54610e6f8385615bbe565b1115610e865760de54610e83908490615bd1565b91505b6000826001600160401b03811115610ea057610ea06155ea565b604051908082528060200260200182016040528015610ed957816020015b610ec661535e565b815260200190600190039081610ebe5790505b50905060005b8381101561100557600060de86610ef581615be4565b975081548110610f0757610f07615bfd565b6000918252602080832091909101546040805182855260d9845281852060e082018352805482840190815260018201546060840152600282015460808401526003909101546001600160a01b03811660a0840152600160a01b900460ff1660c0830152815282855260cd845290842054919450929183019160d89181526020808201929092526040908101600020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b0381166060830152600160a01b900460ff16608082015290528351849084908110610ff157610ff1615bfd565b602090810291909101015250600101610edf565b5090505b92915050565b600054610100900460ff161580801561102f5750600054600160ff909116105b806110495750303b158015611049575060005460ff166001145b6110ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610dad565b6000805460ff1916600117905580156110cf576000805461ff0019166101001790555b6110d7613df3565b6110df613e1a565b6110e883613e49565b6110f182613f3f565b8015611137576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61114582610ccf565b1561118a5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e206973207374696c6c2061637469766560581b6044820152606401610dad565b600082815260d960205260409020600390810154600160a01b900460ff1610156111d157600082815260d960205260409020600301805460ff60a01b1916600360a01b1790555b600082815260ca602052604081205b8054158015906111ef57508282105b156113ce578054600090829061120790600190615bd1565b8154811061121757611217615bfd565b60009182526020808320919091015480835260d88252604092839020835160a08101855281548152600182015493810184905260028201549481018590526003909101546001600160a01b03811660608301819052600160a01b90910460ff1660808301529194509261128c929190816140ea565b156113c757631f8e6d4760e01b600090815260db6020527f6cf18b1154c1c08f1ba71d4ce7e67dc7376f0573f20117b99f208dd9dc920610905b815481101561136b578181815481106112e1576112e1615bfd565b600091825260209182902001546060850151918501516040808701519051631f8e6d4760e01b81526001600160a01b0390931693631f8e6d479361132d93919290600190600401615c13565b600060405180830381600087803b15801561134757600080fd5b505af115801561135b573d6000803e3d6000fd5b5050600190920191506112c69050565b508461137681615be4565b95505081606001516001600160a01b031682602001517f87ad69cfa5e1e84e7c0b51e5c2aff751e18efd03a42868266cdc681d81b6079a856040516113bd91815260200190565b60405180910390a3505b50506111e0565b805460000361140257600084815260d960205260409020600301805460ff60a01b1916600160a21b179055611402846143c4565b6040518281527f514847ede4c9eeab05c7fdf8e7c7c4553e673df5b1d75c699bcddaef5dc61b589060200160405180910390a150505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114835760405162461bcd60e51b8152600401610dad90615b10565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114cc600080516020615e31833981519152546001600160a01b031690565b6001600160a01b0316146114f25760405162461bcd60e51b8152600401610dad90615b5c565b6114fb82613c80565b61150782826001613c88565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115ab5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610dad565b50600080516020615e3183398151915290565b60006040518060400160405280600c81526020016b2ba424aa22afa124a22222a960a11b81525060006001600160a01b031660da826040516116009190615c5f565b908152604051908190036020019020546001600160a01b031614806116a4575060da816040516116309190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a49190615c7b565b6116c05760405162461bcd60e51b8152600401610dad90615c98565b604080518082018252600c81526b212620a1a5afa124a22222a960a11b6020820152905160009060da906116f5908490615c5f565b908152604051908190036020019020546001600160a01b0316148061179b575060da816040516117259190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190615c7b565b155b6117b75760405162461bcd60e51b8152600401610dad90615ce4565b6117cf8686866117c85760006144bd565b60016144bd565b92505b50509392505050565b60ca60205281600052604060002081815481106117f757600080fd5b90600052602060002001600091509150505481565b611814613c26565b61181e60006149fb565b565b60dc546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188d9190615d25565b6001600160a01b031614604051806040016040528060118152602001702737ba1030903a37b5b2b71037bbb732b960791b815250906118df5760405162461bcd60e51b8152600401610dad9190615d42565b5060df546001600160a01b03166119385760405162461bcd60e51b815260206004820152601a60248201527f6d6179206e6f742066696e616c697a65206279206c65766963610000000000006044820152606401610dad565b610e4a816000612dfc565b60de818154811061195357600080fd5b600091825260209091200154905081565b611970848484846140ea565b5050505050565b604080518082018252600f81526e212aa223a2aa2fa82927ab24a222a960891b6020820152905160009060da906119af908490615c5f565b908152604051908190036020019020546001600160a01b03161480611a53575060da816040516119df9190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015611a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a539190615c7b565b611a6f5760405162461bcd60e51b8152600401610dad90615c98565b60008211611acf5760405162461bcd60e51b815260206004820152602760248201527f42756467657420616d6f756e74206d7573742062652067726561746572207468604482015266616e207a65726f60c81b6064820152608401610dad565b600084815260d960205260409020600301546002600160a01b90910460ff16108015611aff5750611aff84610ccf565b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b81525090611b4f5760405162461bcd60e51b8152600401610dad9190615d42565b50600084815260d96020526040902060010154821015611bb15760405162461bcd60e51b815260206004820152601b60248201527f4d6179206e6f74206465637265617365207468652062756467657400000000006044820152606401610dad565b611bba84614a4d565b600084815260d9602052604090208481556001808201849055600390910180546001600160a01b0319166001600160a01b038616179081905560ff600160a01b909104161015611c2757600084815260d960205260409020600301805460ff60a01b1916600160a01b1790555b60dd54841115611c375760dd8490555b6267585160e71b600090815260db6020527fd6d60453638d132e7dd5354555c754d95c7dd70c86cfa94049fda5877cba93f5905b8154811015611cff57818181548110611c8657611c86615bfd565b6000918252602090912001546040516267585160e71b815260048101889052602481018690526001600160a01b03909116906333ac288090604401600060405180830381600087803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b505060019092019150611c6b9050565b505050505050565b611d0f615383565b611d17615383565b600083815260d960209081526040808320815160a081018352815481526001820154818501526002820154818401526003909101546001600160a01b0381166060830152600160a01b900460ff16608082015286845260cd90925282205490935060d8919081526020808201929092526040908101600020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b0381166060830152600160a01b900460ff166080820152919391925050565b600081815260d86020526040902060038101546001600160a01b03163314611e525760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920746865206269646465722063616e2063616e63656c2074686520626044820152611a5960f21b6064820152608401610dad565b6001810154600090815260d96020526040902060020154829003611eb85760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742063616e63656c207468652074656e74617469766520626964006044820152606401610dad565b611ecc8160010154338360020154336140ea565b15611ff457631f8e6d4760e01b600090815260db6020527f6cf18b1154c1c08f1ba71d4ce7e67dc7376f0573f20117b99f208dd9dc920610905b8154811015611fa857818181548110611f2157611f21615bfd565b6000918252602090912001546001848101546002860154604051631f8e6d4760e01b81526001600160a01b0390941693631f8e6d4793611f6a9333939092909190600401615c13565b600060405180830381600087803b158015611f8457600080fd5b505af1158015611f98573d6000803e3d6000fd5b505060019092019150611f069050565b50600382015460018301546040518581526001600160a01b03909216917f87ad69cfa5e1e84e7c0b51e5c2aff751e18efd03a42868266cdc681d81b6079a9060200160405180910390a3505b6120018160010154610ccf565b15801561201f57506001810154600090815260ca6020526040902054155b1561150757600181018054600090815260d960205260409020600301805460ff60a01b1916600160a21b17905554611507906143c4565b6060600060dd5483111561206a5760dd5492505b835b8381116120a15761207c81614aa4565b1561208f578161208b81615be4565b9250505b8061209981615be4565b91505061206c565b506000816001600160401b038111156120bc576120bc6155ea565b6040519080825280602002602001820160405280156120f557816020015b6120e261535e565b8152602001906001900390816120da5790505b5090506000855b85811161221b5761210c81614aa4565b156122095760408051600083815260d9602090815283822060e084018552805484860190815260018201546060860152600282015460808601526003909101546001600160a01b03811660a0860152600160a01b900460ff1660c0850152835284825260cd815292812054919283019160d8919081526020808201929092526040908101600020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b0381166060830152600160a01b900460ff166080820152905283518490849081106121ef576121ef615bfd565b6020026020010181905250818061220590615be4565b9250505b8061221381615be4565b9150506120fc565b509095945050505050565b600081815260ca602052604081208054606092906001600160401b03811115612251576122516155ea565b60405190808252806020026020018201604052801561228a57816020015b612277615383565b81526020019060019003908161226f5790505b50905060005b825481101561233b5760d860008483815481106122af576122af615bfd565b600091825260208083209091015483528281019390935260409182019020815160a08101835281548152600182015493810193909352600281015491830191909152600301546001600160a01b038116606083015260ff600160a01b909104166080820152825183908390811061232857612328615bfd565b6020908102919091010152600101612290565b509392505050565b61234b613c26565b6001600160e01b03198116633bf4472f60e11b14610e4a576001600160e01b03198116600090815260db60205260408120610e4a916153be565b61238d613c26565b6040516301ffc9a760e01b8152633bf4472f60e11b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156123d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fc9190615c7b565b1561247457633bf4472f60e11b600090815260db6020527f4b88b10da8f7aa441532046b0abacdd6d52446dae11265856c4299fa28387786805483929061244557612445615bfd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60005b60d75481101561150757816001600160a01b03166301ffc9a760d783815481106124a3576124a3615bfd565b90600052602060002090600891828204019190066004029054906101000a900460e01b6040518263ffffffff1660e01b81526004016124f291906001600160e01b031991909116815260200190565b602060405180830381865afa15801561250f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125339190615c7b565b156125b45760db600060d7838154811061254f5761254f615bfd565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b0319168352828101939093526040909101812080546001810182559082529190200180546001600160a01b0319166001600160a01b0384161790555b600101612477565b600083815260ca6020526040902080546060919080851061261f5760405162461bcd60e51b815260206004820152601b60248201527f537461727420696e646578206973206f7574206f662072616e676500000000006044820152606401610dad565b6000841161266f5760405162461bcd60e51b815260206004820152601f60248201527f4c696d6974206d7573742062652067726561746572207468616e207a65726f006044820152606401610dad565b600061267b8587615bbe565b9050818111156126885750805b60006126948783615bd1565b90506000816001600160401b038111156126b0576126b06155ea565b60405190808252806020026020018201604052801561270e57816020015b6126fb60405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b8152602001906001900390816126ce5790505b50905060005b828110156127c457600086612729838c615bbe565b8154811061273957612739615bfd565b9060005260206000200154905060c9818154811061275957612759615bfd565b60009182526020918290206040805160608101825260039093029091018054835260018101546001600160a01b0316938301939093526002909201549181019190915283518490849081106127b0576127b0615bfd565b602090810291909101015250600101612714565b509450505050505b9392505050565b60c981815481106127e357600080fd5b60009182526020909120600390910201805460018201546002909201549092506001600160a01b039091169083565b604080518082018252600581526420a226a4a760d91b6020820152905160009060da90612840908490615c5f565b908152604051908190036020019020546001600160a01b031614806128e4575060da816040516128709190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa1580156128c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e49190615c7b565b6129005760405162461bcd60e51b8152600401610dad90615c98565b600061290b84613baf565b600085815260d96020526040902060030154909150600160a01b900460ff16600114801561294157506001600160a01b03811615155b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b815250906129915760405162461bcd60e51b8152600401610dad9190615d42565b50600083815260d86020908152604091829020825160a081018452815481526001820154928101929092526002810154928201929092526003909101546001600160a01b0380821660608401819052600160a01b90920460ff16608084015283169003612a4b5760405162461bcd60e51b815260206004820152602260248201527f746f6b656e206f776e6572206d61796e6f742077696e2074686520617563746960448201526137b760f11b6064820152608401610dad565b600085815260d960209081526040822060028101879055600301805460ff60a01b1916600160a11b179055634d0b92f560e11b825260db90527f076860097f15b95a12ed9b9b50f364baf4c96bd04b0d38983e18f0af20a78aed905b8154811015612b4e57818181548110612ac257612ac2615bfd565b60009182526020909120015460608401516040808601519051634d0b92f560e11b81526001600160a01b039283166004820152602481018b90526044810191909152911690639a1725ea90606401600060405180830381600087803b158015612b2a57600080fd5b505af1158015612b3e573d6000803e3d6000fd5b505060019092019150612aa79050565b50604051859087907f9630dce4ffafcbb85fc65776a5a96ff1bb46c93340f0d34725adbd91941edcc590600090a3505050505050565b60005b60de5483108015612b9757508181105b1561113757600060de84612baa81615be4565b955081548110612bbc57612bbc615bfd565b90600052602060002001549050612bd281614aa4565b15612be057612be081614b01565b5080612beb81615be4565b915050612b87565b60c954600090612c0590600190615bd1565b905090565b60dd54811115612c19575060dd545b815b81811161113757612c2b81614aa4565b15612c3957612c3981614b01565b80612c4381615be4565b915050612c1b565b604080518082018252600581526420a226a4a760d91b6020820152905160009060da90612c79908490615c5f565b908152604051908190036020019020546001600160a01b03161480612d1d575060da81604051612ca99190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1d9190615c7b565b612d395760405162461bcd60e51b8152600401610dad90615c98565b60006001600160a01b031660da8686604051612d56929190615b00565b908152604051908190036020019020546001600160a01b0316146119705760da8585604051612d86929190615b00565b9081526040519081900360200181205463ab01b46960e01b82526001600160a01b0385811660048401528415156024840152169063ab01b46990604401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b505050505050505050565b600082815260d96020526040902060030154600160a01b900460ff166002148015612e2b5750612e2b82610ccf565b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b81525090612e7b5760405162461bcd60e51b8152600401610dad9190615d42565b5060dc546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b5050633bf4472f60e11b600090815260db6020527f4b88b10da8f7aa441532046b0abacdd6d52446dae11265856c4299fa28387786805491935091508290612f2c57612f2c615bfd565b60009182526020808320919091015485835260d982526040808420600290810154855260d8845293819020815160a0810183528154815260018201549481019490945293840154908301526003909201546001600160a01b038082166060840152600160a01b90910460ff166080830152909116915081156130935760dc5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018790529091169063095ea7b390604401600060405180830381600087803b158015612ff657600080fd5b505af115801561300a573d6000803e3d6000fd5b505050606082015160408084015160808501519151633bf4472f60e11b81526001600160a01b03938416600482015260248101899052604481019190915260ff909116606482015290841691506377e88e5e90608401600060405180830381600087803b15801561307a57600080fd5b505af115801561308e573d6000803e3d6000fd5b505050505b6130bd8482606001518360400151866130b75760df546001600160a01b03166140ea565b336140ea565b5080606001516001600160a01b0316847f4d9113a1377d665eaa1f9168a9c9080f2e488cb820b10149de3d6d2e0f2780c7856130fa576000613100565b83604001515b60405190815260200160405180910390a3505050600090815260d9602052604081206002810191909155600301805460ff60a01b1916600160a01b179055565b60d7818154811061315057600080fd5b9060005260206000209060089182820401919006600402915054906101000a900460e01b81565b60005b81811015611137576131a383838381811061319757613197615bfd565b90506020020135611ddd565b60010161317a565b60dc546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa1580156131f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132189190615d25565b6001600160a01b031614604051806040016040528060118152602001702737ba1030903a37b5b2b71037bbb732b960791b8152509061326a5760405162461bcd60e51b8152600401610dad9190615d42565b50610e4a816001612dfc565b60606000826001600160401b03811115613292576132926155ea565b6040519080825280602002602001820160405280156132cb57816020015b6132b861535e565b8152602001906001900390816132b05790505b50905060005b83811015611005576132fa8585838181106132ee576132ee615bfd565b90506020020135611d07565b83838151811061330c5761330c615bfd565b602002602001015160000184848151811061332957613329615bfd565b6020908102919091018101510191909152526001016132d1565b604080518082018252600c81526b2ba424aa22afa124a22222a960a11b6020820152905160009060da90613378908490615c5f565b908152604051908190036020019020546001600160a01b0316148061341c575060da816040516133a89190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190615c7b565b6134385760405162461bcd60e51b8152600401610dad90615c98565b604080518082018252600c81526b212620a1a5afa124a22222a960a11b6020820152905160009060da9061346d908490615c5f565b908152604051908190036020019020546001600160a01b03161480613513575060da8160405161349d9190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa1580156134ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135119190615c7b565b155b61352f5760405162461bcd60e51b8152600401610dad90615ce4565b868514801561353d57508683145b6135895760405162461bcd60e51b815260206004820152601860248201527f4172726179206c656e67746873206d757374206d6174636800000000000000006044820152606401610dad565b60005b87811015612df1576135f08989838181106135a9576135a9615bfd565b905060200201358888848181106135c2576135c2615bfd565b905060200201358787858181106135db576135db615bfd565b90506020020160208101906106c19190615d75565b5060010161358c565b60db602052816000526040600020818154811061361557600080fd5b6000918252602090912001546001600160a01b03169150829050565b613639613c26565b6001600160a01b03811661369e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dad565b610e4a816149fb565b60006040518060400160405280600c81526020016b2ba424aa22afa124a22222a960a11b81525060006001600160a01b031660da826040516136e99190615c5f565b908152604051908190036020019020546001600160a01b0316148061378d575060da816040516137199190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015613769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061378d9190615c7b565b6137a95760405162461bcd60e51b8152600401610dad90615c98565b604080518082018252600c81526b212620a1a5afa124a22222a960a11b6020820152905160009060da906137de908490615c5f565b908152604051908190036020019020546001600160a01b03161480613884575060da8160405161380e9190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa15801561385e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138829190615c7b565b155b6138a05760405162461bcd60e51b8152600401610dad90615ce4565b6117cf8686866144bd565b604080518082018252600581526420a226a4a760d91b6020820152905160009060da906138d9908490615c5f565b908152604051908190036020019020546001600160a01b0316148061397d575060da816040516139099190615c5f565b908152604051908190036020018120546335f206d960e21b82523360048301526001600160a01b03169063d7c81b6490602401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d9190615c7b565b6139995760405162461bcd60e51b8152600401610dad90615c98565b600082815260d96020526040902060030154600160a01b900460ff16600214613a215760405162461bcd60e51b815260206004820152603460248201527f5468652074656e74617469766520626964206f66207468652061756374696f6e604482015273081b585e481b9bdd0818994818d85b98d95b195960621b6064820152608401610dad565b600082815260d9602090815260408083206002808201805480875260d88652848720855160a0810187528154815260018201548189015293810154958401959095526003948501546001600160a01b038116606085015260ff600160a01b918290041660808501529187905593909201805460ff60a01b1916909217909155639815db5b60e01b845260db909252917f39f88711328ce3bec61f01ff9e88569cf167623ee46137f5758796a82a0604bd905b8154811015613b7a57818181548110613aee57613aee615bfd565b60009182526020909120015460608401516040808601519051639815db5b60e01b81526001600160a01b039283166004820152602481018a90526044810191909152911690639815db5b90606401600060405180830381600087803b158015613b5657600080fd5b505af1158015613b6a573d6000803e3d6000fd5b505060019092019150613ad39050565b50604051839086907fb3cf65e8d1186020c815ee72cf4f860052415b0c05caeda8990171928c2d9c8590600090a35050505050565b60dc546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa925050508015613c15575060408051601f3d908101601f19168201909252613c1291810190615d25565b60015b61100957506000919050565b919050565b6097546001600160a01b0316331461181e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dad565b610e4a613c26565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615613cbb5761113783614bba565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613d15575060408051601f3d908101601f19168201909252613d1291810190615d92565b60015b613d785760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610dad565b600080516020615e318339815191528114613de75760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610dad565b50611137838383614c56565b600054610100900460ff1661181e5760405162461bcd60e51b8152600401610dad90615dab565b600054610100900460ff16613e415760405162461bcd60e51b8152600401610dad90615dab565b61181e614c7b565b600054610100900460ff16613e705760405162461bcd60e51b8152600401610dad90615dab565b60cc80546001600160a01b03199081166001600160a01b03938416179091556040805160608101825260008082526020820181815292820181815260c98054600181018255925291517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2860039092029182015591517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d298301805490941694169390931790915590517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2a90910155565b600054610100900460ff16613f665760405162461bcd60e51b8152600401610dad90615dab565b60dc80546001600160a01b039092166001600160a01b031990921691909117905560db6020527f4b88b10da8f7aa441532046b0abacdd6d52446dae11265856c4299fa283877868054600190810190915560d780548083018255600082905260088082047f8a012a6de2943a5aa4d77acf5e695d4456760a3f1f30a5d6dc2079599187a071908101805463297400ac60046007968716810261010090810a92830263ffffffff93840219909416939093179093558654808901885585810485018054631f8e6d479289168602850a92830292840219169190911790558654808901885585810485018054639a1725ea9289168602850a92830292840219169190911790558654808901885585810485018054639815db5b9289168602850a92830292840219169190911790558654808901885585810485018054639ec0902c9289168602850a9283029284021916919091179055865497880190965592860490910180546333ac28809690941690910290910a938402939092021916919091179055565b600080831161413b5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610dad565b6001600160a01b03841661418d5760405162461bcd60e51b8152602060048201526019602482015278496e76616c6964206465706f7369746f72206164647265737360381b6044820152606401610dad565b6001600160a01b0382166141e35760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207472616e73666572206164647265737300000000000000006044820152606401610dad565b600085815260cb602090815260408083206001600160a01b0388168452909152812054908190036142655760405162461bcd60e51b815260206004820152602660248201527f4e6f206465706f73697420666f756e6420666f72206465706f7369746f7220616044820152656e64206b657960d01b6064820152608401610dad565b600060c9828154811061427a5761427a615bfd565b9060005260206000209060030201905084816002015410156142de5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74206465706f73697420616d6f756e7400000000006044820152606401610dad565b848160020160008282546142f29190615bd1565b9091555050600281015460000361430e5761430e828888614cab565b600087815260cd602052604090205482900361433d5761432d87614d9a565b600088815260cd60205260409020555b60cc5460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018890529091169063a9059cbb906044016020604051808303816000875af1158015614390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b49190615c7b565b506001925050505b949350505050565b600081815260e0602052604090205480156115075760de5481146144815760de8054600091906143f690600190615bd1565b8154811061440657614406615bfd565b9060005260206000200154905060de600160de805490506144279190615bd1565b8154811061443757614437615bfd565b906000526020600020015460de6001846144519190615bd1565b8154811061446157614461615bfd565b600091825260208083209091019290925591825260e09052604090208190555b60de80548061449257614492615df6565b60008281526020808220830160001990810183905590920190925583825260e0905260408120555050565b6000808311604051806060016040528060248152602001615e0d60249139906144f95760405162461bcd60e51b8152600401610dad9190615d42565b50600061450585613baf565b600086815260d960205260409020600301549091506002600160a01b90910460ff1610801561453c57506001600160a01b03811615155b604051806040016040528060198152602001785468652061756374696f6e206973206e6f742061637469766560381b8152509061458c5760405162461bcd60e51b8152600401610dad9190615d42565b50336001600160a01b038216036145f35760405162461bcd60e51b815260206004820152602560248201527f6d6179206e6f7420706c6163652062696420746f2073656c66206f776e6564206044820152643a37b5b2b760d91b6064820152608401610dad565b600085815260cb60209081526040808320338452909152902054801561479d57614643863360c9848154811061462b5761462b615bfd565b906000526020600020906003020160020154336140ea565b50631f8e6d4760e01b600090815260db6020527f6cf18b1154c1c08f1ba71d4ce7e67dc7376f0573f20117b99f208dd9dc920610905b81548110156147465781818154811061469457614694615bfd565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316631f8e6d47338a60c987815481106146d5576146d5615bfd565b90600052602060002090600302016002015460006040518563ffffffff1660e01b81526004016147089493929190615c13565b600060405180830381600087803b15801561472257600080fd5b505af1158015614736573d6000803e3d6000fd5b5050600190920191506146799050565b50600082815260d860209081526040918290206003015491518481526001600160a01b039092169189917f87ad69cfa5e1e84e7c0b51e5c2aff751e18efd03a42868266cdc681d81b6079a910160405180910390a3505b60006147aa873388614e3c565b6040805160a08101825282815260208082018b81528284018b8152336060850190815260ff808d1660808701908152600089815260d887528881209751885594516001880155925160028701559051600390950180549251909116600160a01b026001600160a81b03199092166001600160a01b039590951694909417179092558a825260d9905290812054919250036148d9576040805160a08101825288815260006020808301828152838501838152606085018481526001608087018181528f875260d99095529690942094518555905194840194909455925160028301555160039091018054925160ff16600160a01b026001600160a81b03199093166001600160a01b03929092169190911791909117905560dd548711156148d05760dd8790555b6148d987614a4d565b630a5d002b60e21b600090815260db6020527f7ec665ac93a0c8dbec36ff555c3697fad662364b62b4d6d94e8e7e503d6591b3905b81548110156149a95781818154811061492957614929615bfd565b600091825260209091200154604051630a5d002b60e21b8152336004820152602481018b9052604481018a90526001600160a01b039091169063297400ac90606401600060405180830381600087803b15801561498557600080fd5b505af1158015614999573d6000803e3d6000fd5b50506001909201915061490e9050565b50604080518881526020810184905260ff881681830152905133918a917f8f83e84f41594286fcdd91dc68c77fb6b2177c957251725ff397f8b8b3b687029181900360600190a3509695505050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260e060205260408120549003610e4a5760de80546001810182557ffae8130c0619f84b4b44f01b84806f04e82e536d70e05f2356977fa318aecc1a0182905554600082815260e0602052604090205550565b6000614aaf82610ccf565b8015614ad75750600082815260d96020526040902060030154600160a01b900460ff16600111155b8015611009575050600090815260d960205260409020600390810154600160a01b900460ff161090565b6000614b0c82613baf565b600083815260ca602052604081209192505b8154811015614bb457600060c9838381548110614b3d57614b3d615bfd565b906000526020600020015481548110614b5857614b58615bfd565b6000918252602090912060039091020160018101549091506001600160a01b03858116911603614bab5760018101546002820154614ba49187916001600160a01b0390911690816140ea565b5050614bb4565b50600101614b1e565b50505050565b6001600160a01b0381163b614c275760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610dad565b600080516020615e3183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b614c5f836151f7565b600082511180614c6c5750805b1561113757614bb48383615237565b600054610100900460ff16614ca25760405162461bcd60e51b8152600401610dad90615dab565b61181e336149fb565b600082815260cb602090815260408083206001600160a01b0385168452825280832083905584835260ca90915281208054909190614ceb90600190615bd1565b905060005b818111611cff5785838281548110614d0a57614d0a615bfd565b906000526020600020015403614d8857818114614d5d57828281548110614d3357614d33615bfd565b9060005260206000200154838281548110614d5057614d50615bfd565b6000918252602090912001555b82805480614d6d57614d6d615df6565b60019003818190600052602060002001600090559055611cff565b80614d9281615be4565b915050614cf0565b600081815260ca6020526040812081805b8254811015614e34576000838281548110614dc857614dc8615bfd565b90600052602060002001549050600060c98281548110614dea57614dea615bfd565b60009182526020822060039190910201915084818360020154614e0d9190615bbe565b1115614e2957808260020154614e239190615bbe565b94508296505b505050600101614dab565b505050919050565b6000808211614e815760405162461bcd60e51b8152602060048201526011602482015270416d6f756e7420697320746f6f206c6f7760781b6044820152606401610dad565b6001600160a01b038316614ed35760405162461bcd60e51b8152602060048201526019602482015278496e76616c6964206465706f7369746f72206164647265737360381b6044820152606401610dad565b600084815260cb602090815260408083206001600160a01b03871684529091528120549081900361507a5760cc546040516323b872dd60e01b81526001600160a01b03868116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af1158015614f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7b9190615c7b565b50604080516060810182528681526001600160a01b03868116602080840182815284860189815260c9805460018082018355600092835297517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d28600383029081019190915593517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d29850180546001600160a01b031916919098161790965590517f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2a909201919091558a815260ca825285812080549586018155815281812090940183905589845260cb8152848420918452529190208190559150615137565b60cc546040516323b872dd60e01b81526001600160a01b03868116600483015230602483015260448201869052909116906323b872dd906064016020604051808303816000875af11580156150d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150f79190615c7b565b508260c9828154811061510c5761510c615bfd565b9060005260206000209060030201600201600082825461512c9190615bbe565b925050819055508091505b600085815260cd60205260409020548281146117d2576000806151728860c9858154811061516757615167615bfd565b506000908152919050565b90508160c9868154811061518857615188615bfd565b9060005260206000209060030201600201546151a49190615bbe565b8160c985815481106151b8576151b8615bfd565b9060005260206000209060030201600201546151d49190615bbe565b10156151ec57600088815260cd602052604090208590555b505050509392505050565b61520081614bba565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606127cc8383604051806060016040528060278152602001615e51602791396060600080856001600160a01b0316856040516152749190615c5f565b600060405180830381855af49150503d80600081146152af576040519150601f19603f3d011682016040523d82523d6000602084013e6152b4565b606091505b50915091506117cf868383876060831561532f578251600003615328576001600160a01b0385163b6153285760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dad565b50816143bc565b6143bc83838151156153445781518083602001fd5b8060405162461bcd60e51b8152600401610dad9190615d42565b6040518060400160405280615371615383565b815260200161537e615383565b905290565b6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b03168152602001600060ff1681525090565b5080546000825590600052602060002090810190610e4a91905b808211156153ec57600081556001016153d8565b5090565b6001600160a01b0381168114610e4a57600080fd5b6000806040838503121561541857600080fd5b82359150602083013561542a816153f0565b809150509250929050565b60006020828403121561544757600080fd5b5035919050565b60008083601f84011261546057600080fd5b5081356001600160401b0381111561547757600080fd5b60208301915083602082850101111561548f57600080fd5b9250929050565b6000806000604084860312156154ab57600080fd5b83356001600160401b038111156154c157600080fd5b6154cd8682870161544e565b90945092505060208401356154e1816153f0565b809150509250925092565b6000602082840312156154fe57600080fd5b81356127cc816153f0565b6000806040838503121561551c57600080fd5b50508035926020909101359150565b8051825260208082015190830152604080820151908301526060808201516001600160a01b03169083015260809081015160ff16910152565b602080825282518282018190526000918401906040840190835b8181101561221b57835161559384825161552b565b602001516155a460a085018261552b565b5060209390930192610140929092019160010161557e565b600080604083850312156155cf57600080fd5b82356155da816153f0565b9150602083013561542a816153f0565b634e487b7160e01b600052604160045260246000fd5b6000806001600160401b0384111561561a5761561a6155ea565b50604051601f19601f85018116603f011681018181106001600160401b0382111715615648576156486155ea565b60405283815290508082840185101561566057600080fd5b83836020830137600060208583010152509392505050565b6000806040838503121561568b57600080fd5b8235615696816153f0565b915060208301356001600160401b038111156156b157600080fd5b8301601f810185136156c257600080fd5b6156d185823560208401615600565b9150509250929050565b8015158114610e4a57600080fd5b6000806000606084860312156156fe57600080fd5b833592506020840135915060408401356154e1816156db565b6000806000806080858703121561572d57600080fd5b84359350602085013561573f816153f0565b9250604085013591506060850135615756816153f0565b939692955090935050565b60008060006060848603121561577657600080fd5b833592506020840135615788816153f0565b929592945050506040919091013590565b61014081016157a8828561552b565b6127cc60a083018461552b565b602080825282518282018190526000918401906040840190835b8181101561221b576157e283855161552b565b6020939093019260a092909201916001016157cf565b80356001600160e01b031981168114613c2157600080fd5b60006020828403121561582257600080fd5b6127cc826157f8565b60008060006060848603121561584057600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000918401906040840190835b8181101561221b578351805184526020808201516001600160a01b0316818601526040918201519185019190915290930192606090920191600101615871565b6000602082840312156158c357600080fd5b81356001600160401b038111156158d957600080fd5b8201601f810184136158ea57600080fd5b6143bc84823560208401615600565b6000806000806060858703121561590f57600080fd5b84356001600160401b0381111561592557600080fd5b6159318782880161544e565b9095509350506020850135615945816153f0565b91506040850135615756816156db565b6000806040838503121561596857600080fd5b82359150602083013561542a816156db565b60008083601f84011261598c57600080fd5b5081356001600160401b038111156159a357600080fd5b6020830191508360208260051b850101111561548f57600080fd5b600080602083850312156159d157600080fd5b82356001600160401b038111156159e757600080fd5b6159f38582860161597a565b90969095509350505050565b60008060008060008060608789031215615a1857600080fd5b86356001600160401b03811115615a2e57600080fd5b615a3a89828a0161597a565b90975095505060208701356001600160401b03811115615a5957600080fd5b615a6589828a0161597a565b90955093505060408701356001600160401b03811115615a8457600080fd5b615a9089828a0161597a565b979a9699509497509295939492505050565b60008060408385031215615ab557600080fd5b615abe836157f8565b946020939093013593505050565b600080600060608486031215615ae157600080fd5b8335925060208401359150604084013560ff811681146154e157600080fd5b8183823760009101908152919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561100957611009615ba8565b8181038181111561100957611009615ba8565b600060018201615bf657615bf6615ba8565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b60005b83811015615c56578181015183820152602001615c3e565b50506000910152565b60008251615c71818460208701615c3b565b9190910192915050565b600060208284031215615c8d57600080fd5b81516127cc816156db565b6020808252602c908201527f446f6573206e6f7420686176652070726976696c65676520746f2063616c6c2060408201526b3a343290333ab731ba34b7b760a11b606082015260800190565b60208082526021908201527f426c6f636b65642066726f6d2063616c6c696e67207468652066756e6374696f6040820152603760f91b606082015260800190565b600060208284031215615d3757600080fd5b81516127cc816153f0565b6020815260008251806020840152615d61816040850160208701615c3b565b601f01601f19169190910160400192915050565b600060208284031215615d8757600080fd5b81356127cc816156db565b600060208284031215615da457600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfe42696420616d6f756e74206d7573742062652067726561746572207468616e207a65726f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ad009a9767da84eb8ed22db9fabcee967044fc7c990e813d144cfb42abd36b5b64736f6c634300081b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
