[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "BundleAlreadyUnwrapped", "type": "error" }, { "inputs": [], "name": "BundleSignatureExpired", "type": "error" }, { "inputs": [], "name": "CannotBundleAnAlreadyBundledToken", "type": "error" }, { "inputs": [], "name": "CannotBurnToken", "type": "error" }, { "inputs": [], "name": "CannotRedeemBundleToken", "type": "error" }, { "inputs": [], "name": "ContractPaused", "type": "error" }, { "inputs": [], "name": "InvalidAuxToken", "type": "error" }, { "inputs": [], "name": "InvalidSignerAddress", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintSignatureExpired", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "RedeemByNonOwner", "type": "error" }, { "inputs": [], "name": "RedeemSignatureExpired", "type": "error" }, { "inputs": [], "name": "RedemptionPaused", "type": "error" }, { "inputs": [], "name": "SignatureUsedOrCancelled", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferSignatureExpired", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnauthorizedCaller", "type": "error" }, { "inputs": [], "name": "UnauthorizedContract", "type": "error" }, { "inputs": [], "name": "UnwrapByNonOwner", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "string", "name": "newUri", "type": "string" } ], "name": "BaseUriUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "auxTokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint48", "name": "auxTokenId", "type": "uint48" }, { "indexed": true, "internalType": "uint48", "name": "americanaTokenId", "type": "uint48" }, { "indexed": true, "internalType": "uint256", "name": "bundleTokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "bundler", "type": "address" } ], "name": "BundleCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "auxTokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint48", "name": "auxTokenId", "type": "uint48" }, { "indexed": true, "internalType": "uint48", "name": "americanaTokenId", "type": "uint48" }, { "indexed": true, "internalType": "address", "name": "redeemer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "bundleTokenId", "type": "uint256" } ], "name": "BundleUnwrapped", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [], "name": "FailedAuthWithdrawal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "PauseStateUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "RedeemStateUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "RolesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "bundler", "type": "address" }, { "indexed": true, "internalType": "address", "name": "auxTokenAddress", "type": "address" }, { "indexed": true, "internalType": "uint48", "name": "auxTokenId", "type": "uint48" }, { "indexed": false, "internalType": "uint48", "name": "americanaTokenId", "type": "uint48" } ], "name": "SigCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "redeemer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenRedeemed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "WrapperBurnt", "type": "event" }, { "inputs": [], "name": "APPROVED_CONTRACT_ROLE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "AUTHORIZED_MESSAGE_SIGNER_ROLE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "AUTH_ADDRESS_ROLE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleTokenId", "type": "uint256" } ], "name": "authUnwrapAmericanaToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "authUnwrapExternalToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sigExpirationDate", "type": "uint256" }, { "internalType": "address", "name": "_auxTokenAddress", "type": "address" }, { "internalType": "uint48", "name": "_auxTokenId", "type": "uint48" }, { "internalType": "uint48", "name": "_americanaTokenId", "type": "uint48" }, { "internalType": "uint256", "name": "_salt", "type": "uint256" }, { "internalType": "bytes", "name": "_authSig", "type": "bytes" } ], "name": "bundle", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "bundleDataByTokenId", "outputs": [ { "internalType": "address", "name": "auxTokenAddress", "type": "address" }, { "internalType": "uint48", "name": "auxTokenId", "type": "uint48" }, { "internalType": "uint48", "name": "americanaTokenId", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleTokenId", "type": "uint256" } ], "name": "burnWrapperToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_bundler", "type": "address" }, { "internalType": "uint256", "name": "_sigExpirationDate", "type": "uint256" }, { "internalType": "address", "name": "_auxTokenAddress", "type": "address" }, { "internalType": "uint48", "name": "_auxTokenId", "type": "uint48" }, { "internalType": "uint48", "name": "_americanaTokenId", "type": "uint48" }, { "internalType": "uint256", "name": "_salt", "type": "uint256" } ], "name": "cancelBundleDigest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_bundler", "type": "address" }, { "internalType": "uint256", "name": "_sigExpirationDate", "type": "uint256" }, { "internalType": "address", "name": "_auxTokenAddress", "type": "address" }, { "internalType": "uint48", "name": "_auxTokenId", "type": "uint48" }, { "internalType": "uint48", "name": "_americanaTokenId", "type": "uint48" }, { "internalType": "uint256", "name": "_salt", "type": "uint256" } ], "name": "checkIfInvalidated", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "flipPause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "flipRedeemable", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "grantRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAllRoles", "outputs": [ { "internalType": "bool", "name": "result", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAnyRole", "outputs": [ { "internalType": "bool", "name": "result", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "isInvalidated", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_sigExpirationTimestamp", "type": "uint256" }, { "internalType": "bytes", "name": "_authSig", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "ordinalsFromRoles", "outputs": [ { "internalType": "uint8[]", "name": "ordinals", "type": "uint8[]" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ownershipHandoverValidFor", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownershipOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721A.TokenOwnership", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_sigExpirationTimestamp", "type": "uint256" }, { "internalType": "bytes", "name": "_authSig", "type": "bytes" } ], "name": "redeem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "redemptionPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "renounceRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "revokeRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint8[]", "name": "ordinals", "type": "uint8[]" } ], "name": "rolesFromOrdinals", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "rolesOf", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "_approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "sigExpiration", "type": "uint256" }, { "internalType": "bytes", "name": "_authSig", "type": "bytes" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_bundleTokenId", "type": "uint256" } ], "name": "unwrap", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162005815380380620058158339818101604052810190620000379190620002e3565b818181600290816200004a9190620005b3565b5080600390816200005c9190620005b3565b506200006d6200010b60201b60201c565b60008190555050506000600860006101000a81548160ff0219169083151502179055506000600860016101000a81548160ff0219169083151502179055506040518060400160405280601581526020017f68747470733a2f2f616d65726963616e612e696f2f000000000000000000000081525060099081620000f19190620005b3565b5062000103336200011460201b60201c565b50506200069a565b60006001905090565b8060601b60601c905080638b78c6d819558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a350565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001b9826200016e565b810181811067ffffffffffffffff82111715620001db57620001da6200017f565b5b80604052505050565b6000620001f062000150565b9050620001fe8282620001ae565b919050565b600067ffffffffffffffff8211156200022157620002206200017f565b5b6200022c826200016e565b9050602081019050919050565b60005b83811015620002595780820151818401526020810190506200023c565b60008484015250505050565b60006200027c620002768462000203565b620001e4565b9050828152602081018484840111156200029b576200029a62000169565b5b620002a884828562000239565b509392505050565b600082601f830112620002c857620002c762000164565b5b8151620002da84826020860162000265565b91505092915050565b60008060408385031215620002fd57620002fc6200015a565b5b600083015167ffffffffffffffff8111156200031e576200031d6200015f565b5b6200032c85828601620002b0565b925050602083015167ffffffffffffffff81111562000350576200034f6200015f565b5b6200035e85828601620002b0565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003bb57607f821691505b602082108103620003d157620003d062000373565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200043b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003fc565b620004478683620003fc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004946200048e62000488846200045f565b62000469565b6200045f565b9050919050565b6000819050919050565b620004b08362000473565b620004c8620004bf826200049b565b84845462000409565b825550505050565b600090565b620004df620004d0565b620004ec818484620004a5565b505050565b5b81811015620005145762000508600082620004d5565b600181019050620004f2565b5050565b601f82111562000563576200052d81620003d7565b6200053884620003ec565b8101602085101562000548578190505b620005606200055785620003ec565b830182620004f1565b50505b505050565b600082821c905092915050565b6000620005886000198460080262000568565b1980831691505092915050565b6000620005a3838362000575565b9150826002028217905092915050565b620005be8262000368565b67ffffffffffffffff811115620005da57620005d96200017f565b5b620005e68254620003a2565b620005f382828562000518565b600060209050601f8311600181146200062b576000841562000616578287015190505b62000622858262000595565b86555062000692565b601f1984166200063b86620003d7565b60005b8281101562000665578489015182556001820191506020850194506020810190506200063e565b8683101562000685578489015162000681601f89168262000575565b8355505b6001600288020188555050505b505050505050565b61516b80620006aa6000396000f3fe60806040526004361061031a5760003560e01c8063660392af116101ab57806395d89b41116100f7578063d7533f0211610095578063f04e283e1161006f578063f04e283e14610b62578063f2fde38b14610b7e578063fa12129114610b9a578063fee81cf414610bc35761031a565b8063d7533f0214610ad1578063de0e9a3e14610afc578063e985e9c514610b255761031a565b8063b187bd26116100d1578063b187bd2614610a24578063b88d4fde14610a4f578063c87b56dd14610a6b578063cc92241314610aa85761031a565b806395d89b4114610991578063a22cb465146109bc578063a8b0d82a146109e55761031a565b80637359e41f116101645780638b8d9b7e1161013e5780638b8d9b7e146108e95780638da5cb5b1461091257806391df66721461093d5780639499ac54146109665761031a565b80637359e41f1461085857806373a95ddd1461089557806389f3190c146108c05761031a565b8063660392af1461077b5780636801d2f7146107a65780636c0360eb146107bd57806370a08231146107e8578063715018a614610825578063731133e91461082f5761031a565b80632a31d6811161026a578063514e62fc1161022357806355906214116101fd57806355906214146106af57806355f804b3146106ec578063605105f0146107155780636352211e1461073e5761031a565b8063514e62fc1461063d57806354d1f13d1461067a5780635504ca43146106845761031a565b80632a31d681146105495780632de948071461058657806331035c82146105c3578063385df649146105ee57806342842e0e146106055780634a4ee7b1146106215761031a565b8063140364a1116102d75780631c10893f116102b15780631c10893f146104ca5780631cd64df4146104e657806323b872dd14610523578063256929621461053f5761031a565b8063140364a11461044657806318160ddd14610483578063183a4f6e146104ae5761031a565b806301ffc9a71461031f5780630449015a1461035c57806306fdde0314610385578063081812fc146103b0578063095ea7b3146103ed57806313a661ed14610409575b600080fd5b34801561032b57600080fd5b5061034660048036038101906103419190613c9a565b610c00565b6040516103539190613ce2565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190613e79565b610c92565b005b34801561039157600080fd5b5061039a610f41565b6040516103a79190613f67565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d29190613f89565b610fd3565b6040516103e49190613ff7565b60405180910390f35b6104076004803603810190610402919061403e565b611052565b005b34801561041557600080fd5b50610430600480360381019061042b919061417f565b6110a9565b60405161043d91906141d7565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190613f89565b6110d3565b60405161047a91906142a6565b60405180910390f35b34801561048f57600080fd5b506104986110eb565b6040516104a591906141d7565b60405180910390f35b6104c860048036038101906104c39190613f89565b611102565b005b6104e460048036038101906104df919061403e565b61110f565b005b3480156104f257600080fd5b5061050d6004803603810190610508919061403e565b611125565b60405161051a9190613ce2565b60405180910390f35b61053d600480360381019061053891906142c1565b611145565b005b610547611196565b005b34801561055557600080fd5b50610570600480360381019061056b9190614352565b6111ea565b60405161057d9190613ce2565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906143df565b611250565b6040516105ba91906141d7565b60405180910390f35b3480156105cf57600080fd5b506105d861126b565b6040516105e591906141d7565b60405180910390f35b3480156105fa57600080fd5b50610603611270565b005b61061f600480360381019061061a91906142c1565b6112e2565b005b61063b6004803603810190610636919061403e565b611302565b005b34801561064957600080fd5b50610664600480360381019061065f919061403e565b611318565b6040516106719190613ce2565b60405180910390f35b610682611338565b005b34801561069057600080fd5b50610699611374565b6040516106a691906141d7565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190614442565b611379565b6040516106e39190613ce2565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190614510565b611399565b005b34801561072157600080fd5b5061073c60048036038101906107379190614559565b6113f6565b005b34801561074a57600080fd5b5061076560048036038101906107609190613f89565b6114ce565b6040516107729190613ff7565b60405180910390f35b34801561078757600080fd5b506107906114e0565b60405161079d91906141d7565b60405180910390f35b3480156107b257600080fd5b506107bb6114e5565b005b3480156107c957600080fd5b506107d2611557565b6040516107df9190613f67565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906143df565b611566565b60405161081c91906141d7565b60405180910390f35b61082d61161e565b005b34801561083b57600080fd5b50610856600480360381019061085191906145f0565b611632565b005b34801561086457600080fd5b5061087f600480360381019061087a9190613f89565b61170b565b60405161088c9190614731565b60405180910390f35b3480156108a157600080fd5b506108aa611757565b6040516108b79190613ce2565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e291906147ae565b61176a565b005b3480156108f557600080fd5b50610910600480360381019061090b9190613f89565b611c78565b005b34801561091e57600080fd5b50610927611f38565b6040516109349190613ff7565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190613f89565b611f46565b005b34801561097257600080fd5b5061097b6120ff565b60405161098891906141d7565b60405180910390f35b34801561099d57600080fd5b506109a661210e565b6040516109b39190613f67565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de9190614889565b6121a0565b005b3480156109f157600080fd5b50610a0c6004803603810190610a079190613f89565b6121f7565b604051610a1b939291906148d8565b60405180910390f35b348015610a3057600080fd5b50610a39612265565b604051610a469190613ce2565b60405180910390f35b610a696004803603810190610a64919061490f565b612278565b005b348015610a7757600080fd5b50610a926004803603810190610a8d9190613f89565b6122eb565b604051610a9f9190613f67565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190613f89565b612389565b005b348015610add57600080fd5b50610ae6612575565b604051610af391906149a1565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e9190613f89565b612580565b005b348015610b3157600080fd5b50610b4c6004803603810190610b4791906149bc565b6128d2565b604051610b599190613ce2565b60405180910390f35b610b7c6004803603810190610b7791906143df565b612966565b005b610b986004803603810190610b9391906143df565b6129a7565b005b348015610ba657600080fd5b50610bc16004803603810190610bbc9190614352565b6129d1565b005b348015610bcf57600080fd5b50610bea6004803603810190610be591906143df565b612ab7565b604051610bf791906141d7565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c5b57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c8b5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860009054906101000a900460ff1615610cd9576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600860019054906101000a900460ff1615610d20576040517f89ae2f2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083468433604051602001610d3994939291906149fc565b6040516020818303038152906040528051906020012090506000610d65610d5f83612ad2565b84612b04565b905083421115610da1576040517fc1c663ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dac816008611318565b610de2576040517f4501a91900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16610e02866114ce565b73ffffffffffffffffffffffffffffffffffffffff1614610e4f576040517fdf47ef7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600087815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eeb576040517f8e96c63e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ef6856000612b80565b843373ffffffffffffffffffffffffffffffffffffffff167fce4385affa8ad2cbec45b1660c6f6afcb691bf0a7a73ebda096ee1dfb670fe6f60405160405180910390a35050505050565b606060028054610f5090614a70565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7c90614a70565b8015610fc95780601f10610f9e57610100808354040283529160200191610fc9565b820191906000526020600020905b815481529060010190602001808311610fac57829003601f168201915b5050505050905090565b6000610fde82612dd2565b611014576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8161105e816002611318565b156110725761106d8383612e31565b6110a4565b6040517f72312d7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000815160051b5b80156110cd57816001828501511b1791506020810390506110b1565b50919050565b6110db613bdf565b6110e482612f75565b9050919050565b60006110f5612f95565b6001546000540303905090565b61110c3382612f9e565b50565b611117612fed565b611121828261300a565b5050565b6000638b78c6d8600c528260005281826020600c20541614905092915050565b611150336002611318565b611186576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611191838383613055565b505050565b60006111a0612575565b67ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6000808787878787468860405160200161120a9796959493929190614aa1565b604051602081830303815290604052805190602001209050600a600082815260200190815260200160002060009054906101000a900460ff169150509695505050505050565b6000638b78c6d8600c52816000526020600c20549050919050565b600281565b611278612fed565b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550600860009054906101000a900460ff1615157fb31006682779d0ac02864bee834675baf4592a679bfe75edd5e5847b52ef6f6e60405160405180910390a2565b6112fd83838360405180602001604052806000815250612278565b505050565b61130a612fed565b6113148282612f9e565b5050565b6000638b78c6d8600c5282600052816020600c2054161515905092915050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b600881565b600a6020528060005260406000206000915054906101000a900460ff1681565b6113a1612fed565b80600990816113b09190614cbc565b50806040516113bf9190614dca565b60405180910390207fc35611e34b3940869a5132c8bc8ec4854192b0bfea25d0b9b38bcdeec2c09a7f60405160405180910390a250565b81421115611430576040517f217e660600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858585854660405160200161144b959493929190614e4a565b604051602081830303815290604052805190602001209050600061147761147183612ad2565b84612b04565b9050611484816008611318565b6114ba576040517f4501a91900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c5878787613055565b50505050505050565b60006114d982613377565b9050919050565b600481565b6114ed612fed565b600860019054906101000a900460ff1615600860016101000a81548160ff021916908315150217905550600860019054906101000a900460ff1615157f1018becc3df1e1a2d1aaf91b10593d3928f7b9bb8b09b2509337709ae503336e60405160405180910390a2565b6060611561613443565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115cd576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611626612fed565b61163060006134d5565b565b6000338585468660405160200161164d959493929190614ea9565b6040516020818303038152906040528051906020012090508242111561169f576040517f8a46ab6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116c46116bd836116af84612ad2565b61351390919063ffffffff16565b6008611318565b6116fa576040517f4501a91900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117048585613598565b5050505050565b60606040519050602081016000835b600115611740578183526001811660051b8301925060018201915084821c90508061171a575b5060208301820360051c8352816040525050919050565b600860019054906101000a900460ff1681565b600860009054906101000a900460ff16156117b1576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614806118175750600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b1561184e576040517ff75c13df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003388888888468960405160200161186d9796959493929190614aa1565b604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff16600b60008765ffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611929576040517f48e9a10d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61199261198b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061197d84612ad2565b61351390919063ffffffff16565b6008611318565b6119c8576040517f4501a91900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a600082815260200190815260200160002060009054906101000a900460ff1615611a20576040517fe286cf7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42881015611a5a576040517f9c9de28c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600a600083815260200190815260200160002060006101000a81548160ff021916908315150217905550611a9933308765ffffffffffff16613055565b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330896040518463ffffffff1660e01b8152600401611ad693929190614f2d565b600060405180830381600087803b158015611af057600080fd5b505af1158015611b04573d6000803e3d6000fd5b505050506000611b12613753565b905060405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018865ffffffffffff1681526020018765ffffffffffff16815250600b600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001601a6101000a81548165ffffffffffff021916908365ffffffffffff160217905550905050611c13336001613598565b808665ffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f1fa4c280f24907d768d15e5443122c82afbbf1ef239b6916c1f9aa57968b785d8a33604051611c65929190614f64565b60405180910390a4505050505050505050565b6004611c838161375c565b6000600b60008481526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160008201601a9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff168152505090503073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16636352211e83602001516040518263ffffffff1660e01b8152600401611dab9190614f8d565b602060405180830381865afa158015611dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dec9190614fbd565b73ffffffffffffffffffffffffffffffffffffffff1614158015611e5057503073ffffffffffffffffffffffffffffffffffffffff16611e37826040015165ffffffffffff166114ce565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611f0157611e60836000612b80565b600b6000848152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549065ffffffffffff021916905560008201601a6101000a81549065ffffffffffff02191690555050827f43201bb87c658ee239ad4edc73f6c6011e045a470de31501d0d7d9a034be64ba60405160405180910390a2611f33565b6040517f27c5f99d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000638b78c6d81954905090565b611f4e612fed565b6000600b60008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160008201601a9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603612088576040517ff02a3d4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd303384604001516040518463ffffffff1660e01b81526004016120c993929190614f2d565b600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b505050505050565b6000612109613753565b905090565b60606003805461211d90614a70565b80601f016020809104026020016040519081016040528092919081815260200182805461214990614a70565b80156121965780601f1061216b57610100808354040283529160200191612196565b820191906000526020600020905b81548152906001019060200180831161217957829003601f168201915b5050505050905090565b816121ac816002611318565b156121c0576121bb8383613793565b6121f2565b6040517f72312d7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600b6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900465ffffffffffff169080600001601a9054906101000a900465ffffffffffff16905083565b600860009054906101000a900460ff1681565b612283848484611145565b60008373ffffffffffffffffffffffffffffffffffffffff163b146122e5576122ae8484848461389e565b6122e4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60606122f682612dd2565b61232c576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612336613443565b905060008151036123565760405180602001604052806000815250612381565b80612360846139ee565b604051602001612371929190614fea565b6040516020818303038152906040525b915050919050565b612391612fed565b6000600b60008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160008201601a9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036124cb576040517ff02a3d4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015173ffffffffffffffffffffffffffffffffffffffff166323b872dd303384602001516040518463ffffffff1660e01b815260040161251093929190614f2d565b600060405180830381600087803b15801561252a57600080fd5b505af192505050801561253b575060015b612570577f5a21048a2b36b47d338091d9b003c6f728df8b7fdf15c0ca53c1c8c5b883b69760405160405180910390a1612571565b5b5050565b60006202a300905090565b600860009054906101000a900460ff16156125c7576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166125e7826114ce565b73ffffffffffffffffffffffffffffffffffffffff1614612634576040517fb1c47e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61263f816000612b80565b6000600b60008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160008201601a9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff168152505090503073ffffffffffffffffffffffffffffffffffffffff166323b872dd303384604001516040518463ffffffff1660e01b815260040161275093929190614f2d565b600060405180830381600087803b15801561276a57600080fd5b505af115801561277e573d6000803e3d6000fd5b50505050806000015173ffffffffffffffffffffffffffffffffffffffff166323b872dd303384602001516040518463ffffffff1660e01b81526004016127c793929190614f2d565b600060405180830381600087803b1580156127e157600080fd5b505af11580156127f5573d6000803e3d6000fd5b50505050600b6000838152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549065ffffffffffff021916905560008201601a6101000a81549065ffffffffffff02191690555050813373ffffffffffffffffffffffffffffffffffffffff16826040015165ffffffffffff167f37602d25e8ea42d95356abd2f143ec7f5607b18c30f6942cbd5c63e8c55df191846000015185602001516040516128c692919061500e565b60405180910390a45050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61296e612fed565b63389a75e1600c52806000526020600c20805442111561299657636f5e88186000526004601cfd5b60008155506129a4816134d5565b50565b6129af612fed565b8060601b6129c557637448fbae6000526004601cfd5b6129ce816134d5565b50565b60046129dc8161375c565b6000878787878746886040516020016129fb9796959493929190614aa1565b6040516020818303038152906040528051906020012090506001600a600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508465ffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f15dd0ff2f7088e52e4dfa8850b6f1de3fa30928ea860bb57abc7b59b4728ad5d87604051612aa59190615037565b60405180910390a45050505050505050565b600063389a75e1600c52816000526020600c20549050919050565b6000816020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209050919050565b60006041825118612b7a5760405160208301516040526040830151806060527f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111612b735784600052606084015160001a602052602060406080600060015afa5060006060523d6060185192505b8160405250505b92915050565b6000612b8b83613377565b90506000819050600080612b9e86613a3e565b915091508415612c0757612bba8184612bb5613a65565b613a6d565b612c0657612bcf83612bca613a65565b6128d2565b612c05576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b612c15836000886001613ab1565b8015612c2057600082555b600160806001901b03600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612cc883612c8585600088613ab7565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717613adf565b600460008881526020019081526020016000208190555060007c0200000000000000000000000000000000000000000000000000000000851603612d4e5760006001870190506000600460008381526020019081526020016000205403612d4c576000548114612d4b578460046000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612db8836000886001613b0a565b600160008154809291906001019190505550505050505050565b600081612ddd612f95565b11158015612dec575060005482105b8015612e2a575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6000612e3c826114ce565b90508073ffffffffffffffffffffffffffffffffffffffff16612e5d613a65565b73ffffffffffffffffffffffffffffffffffffffff1614612ec057612e8981612e84613a65565b6128d2565b612ebf576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612f7d613bdf565b612f8e612f8983613377565b613b10565b9050919050565b60006001905090565b638b78c6d8600c52816000526020600c2080548281168118925082825582600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a350505050565b638b78c6d819543314613008576382b429006000526004601cfd5b565b638b78c6d8600c52816000526020600c2081815417915081815581600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a3505050565b600061306082613377565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130c7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806130d384613a3e565b915091506130e981876130e4613a65565b613a6d565b613135576130fe866130f9613a65565b6128d2565b613134576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361319b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131a88686866001613ab1565b80156131b357600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506132818561325d888887613ab7565b7c020000000000000000000000000000000000000000000000000000000017613adf565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036133075760006001850190506000600460008381526020019081526020016000205403613305576000548114613304578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461336f8686866001613b0a565b505050505050565b60008082905080613386612f95565b1161340c5760005481101561340b5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603613409575b600081036133ff5760046000836001900393508381526020019081526020016000205490506133d5565b809250505061343e565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60606009805461345290614a70565b80601f016020809104026020016040519081016040528092919081815260200182805461347e90614a70565b80156134cb5780601f106134a0576101008083540402835291602001916134cb565b820191906000526020600020905b8154815290600101906020018083116134ae57829003601f168201915b5050505050905090565b638b78c6d8198160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a38181555050565b6000604051602083015160405260408301518060605284600052606084015160001a602052602060006080600060017f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a00185106041895114165afa5060005192503d61358757638baa579f6000526004601cfd5b600060605281604052505092915050565b600080549050600082036135d8576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135e56000848385613ab1565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061365c8361364d6000866000613ab7565b61365685613bc6565b17613adf565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b8181146136fd57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506136c2565b5060008203613738576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600081905550505061374e6000848385613b0a565b505050565b60008054905090565b638b78c6d8600c5233600052806020600c20541661379057638b78c6d81954331461378f576382b429006000526004601cfd5b5b50565b80600760006137a0613a65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661384d613a65565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138929190613ce2565b60405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138c4613a65565b8786866040518563ffffffff1660e01b81526004016138e694939291906150a7565b6020604051808303816000875af192505050801561392257506040513d601f19601f8201168201806040525081019061391f9190615108565b60015b61399b573d8060008114613952576040519150601f19603f3d011682016040523d82523d6000602084013e613957565b606091505b506000815103613993576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060a060405101806040526020810391506000825281835b600115613a2957600184039350600a81066030018453600a8104905080613a07575b50828103602084039350808452505050919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8613ace868684613bd6565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b613b18613bdf565b81816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a082901c816020019067ffffffffffffffff16908167ffffffffffffffff168152505060007c01000000000000000000000000000000000000000000000000000000008316141581604001901515908115158152505060e882901c816060019062ffffff16908162ffffff1681525050919050565b60006001821460e11b9050919050565b60009392505050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001600062ffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c7781613c42565b8114613c8257600080fd5b50565b600081359050613c9481613c6e565b92915050565b600060208284031215613cb057613caf613c38565b5b6000613cbe84828501613c85565b91505092915050565b60008115159050919050565b613cdc81613cc7565b82525050565b6000602082019050613cf76000830184613cd3565b92915050565b6000819050919050565b613d1081613cfd565b8114613d1b57600080fd5b50565b600081359050613d2d81613d07565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d8682613d3d565b810181811067ffffffffffffffff82111715613da557613da4613d4e565b5b80604052505050565b6000613db8613c2e565b9050613dc48282613d7d565b919050565b600067ffffffffffffffff821115613de457613de3613d4e565b5b613ded82613d3d565b9050602081019050919050565b82818337600083830152505050565b6000613e1c613e1784613dc9565b613dae565b905082815260208101848484011115613e3857613e37613d38565b5b613e43848285613dfa565b509392505050565b600082601f830112613e6057613e5f613d33565b5b8135613e70848260208601613e09565b91505092915050565b600080600060608486031215613e9257613e91613c38565b5b6000613ea086828701613d1e565b9350506020613eb186828701613d1e565b925050604084013567ffffffffffffffff811115613ed257613ed1613c3d565b5b613ede86828701613e4b565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f22578082015181840152602081019050613f07565b60008484015250505050565b6000613f3982613ee8565b613f438185613ef3565b9350613f53818560208601613f04565b613f5c81613d3d565b840191505092915050565b60006020820190508181036000830152613f818184613f2e565b905092915050565b600060208284031215613f9f57613f9e613c38565b5b6000613fad84828501613d1e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fe182613fb6565b9050919050565b613ff181613fd6565b82525050565b600060208201905061400c6000830184613fe8565b92915050565b61401b81613fd6565b811461402657600080fd5b50565b60008135905061403881614012565b92915050565b6000806040838503121561405557614054613c38565b5b600061406385828601614029565b925050602061407485828601613d1e565b9150509250929050565b600067ffffffffffffffff82111561409957614098613d4e565b5b602082029050602081019050919050565b600080fd5b600060ff82169050919050565b6140c5816140af565b81146140d057600080fd5b50565b6000813590506140e2816140bc565b92915050565b60006140fb6140f68461407e565b613dae565b9050808382526020820190506020840283018581111561411e5761411d6140aa565b5b835b81811015614147578061413388826140d3565b845260208401935050602081019050614120565b5050509392505050565b600082601f83011261416657614165613d33565b5b81356141768482602086016140e8565b91505092915050565b60006020828403121561419557614194613c38565b5b600082013567ffffffffffffffff8111156141b3576141b2613c3d565b5b6141bf84828501614151565b91505092915050565b6141d181613cfd565b82525050565b60006020820190506141ec60008301846141c8565b92915050565b6141fb81613fd6565b82525050565b600067ffffffffffffffff82169050919050565b61421e81614201565b82525050565b61422d81613cc7565b82525050565b600062ffffff82169050919050565b61424b81614233565b82525050565b60808201600082015161426760008501826141f2565b50602082015161427a6020850182614215565b50604082015161428d6040850182614224565b5060608201516142a06060850182614242565b50505050565b60006080820190506142bb6000830184614251565b92915050565b6000806000606084860312156142da576142d9613c38565b5b60006142e886828701614029565b93505060206142f986828701614029565b925050604061430a86828701613d1e565b9150509250925092565b600065ffffffffffff82169050919050565b61432f81614314565b811461433a57600080fd5b50565b60008135905061434c81614326565b92915050565b60008060008060008060c0878903121561436f5761436e613c38565b5b600061437d89828a01614029565b965050602061438e89828a01613d1e565b955050604061439f89828a01614029565b94505060606143b089828a0161433d565b93505060806143c189828a0161433d565b92505060a06143d289828a01613d1e565b9150509295509295509295565b6000602082840312156143f5576143f4613c38565b5b600061440384828501614029565b91505092915050565b6000819050919050565b61441f8161440c565b811461442a57600080fd5b50565b60008135905061443c81614416565b92915050565b60006020828403121561445857614457613c38565b5b60006144668482850161442d565b91505092915050565b600067ffffffffffffffff82111561448a57614489613d4e565b5b61449382613d3d565b9050602081019050919050565b60006144b36144ae8461446f565b613dae565b9050828152602081018484840111156144cf576144ce613d38565b5b6144da848285613dfa565b509392505050565b600082601f8301126144f7576144f6613d33565b5b81356145078482602086016144a0565b91505092915050565b60006020828403121561452657614525613c38565b5b600082013567ffffffffffffffff81111561454457614543613c3d565b5b614550848285016144e2565b91505092915050565b600080600080600060a0868803121561457557614574613c38565b5b600061458388828901614029565b955050602061459488828901614029565b94505060406145a588828901613d1e565b93505060606145b688828901613d1e565b925050608086013567ffffffffffffffff8111156145d7576145d6613c3d565b5b6145e388828901613e4b565b9150509295509295909350565b6000806000806080858703121561460a57614609613c38565b5b600061461887828801614029565b945050602061462987828801613d1e565b935050604061463a87828801613d1e565b925050606085013567ffffffffffffffff81111561465b5761465a613c3d565b5b61466787828801613e4b565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146a8816140af565b82525050565b60006146ba838361469f565b60208301905092915050565b6000602082019050919050565b60006146de82614673565b6146e8818561467e565b93506146f38361468f565b8060005b8381101561472457815161470b88826146ae565b9750614716836146c6565b9250506001810190506146f7565b5085935050505092915050565b6000602082019050818103600083015261474b81846146d3565b905092915050565b600080fd5b60008083601f84011261476e5761476d613d33565b5b8235905067ffffffffffffffff81111561478b5761478a614753565b5b6020830191508360018202830111156147a7576147a66140aa565b5b9250929050565b600080600080600080600060c0888a0312156147cd576147cc613c38565b5b60006147db8a828b01613d1e565b97505060206147ec8a828b01614029565b96505060406147fd8a828b0161433d565b955050606061480e8a828b0161433d565b945050608061481f8a828b01613d1e565b93505060a088013567ffffffffffffffff8111156148405761483f613c3d565b5b61484c8a828b01614758565b925092505092959891949750929550565b61486681613cc7565b811461487157600080fd5b50565b6000813590506148838161485d565b92915050565b600080604083850312156148a05761489f613c38565b5b60006148ae85828601614029565b92505060206148bf85828601614874565b9150509250929050565b6148d281614314565b82525050565b60006060820190506148ed6000830186613fe8565b6148fa60208301856148c9565b61490760408301846148c9565b949350505050565b6000806000806080858703121561492957614928613c38565b5b600061493787828801614029565b945050602061494887828801614029565b935050604061495987828801613d1e565b925050606085013567ffffffffffffffff81111561497a57614979613c3d565b5b61498687828801613e4b565b91505092959194509250565b61499b81614201565b82525050565b60006020820190506149b66000830184614992565b92915050565b600080604083850312156149d3576149d2613c38565b5b60006149e185828601614029565b92505060206149f285828601614029565b9150509250929050565b6000608082019050614a1160008301876141c8565b614a1e60208301866141c8565b614a2b60408301856141c8565b614a386060830184613fe8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a8857607f821691505b602082108103614a9b57614a9a614a41565b5b50919050565b600060e082019050614ab6600083018a613fe8565b614ac360208301896141c8565b614ad06040830188613fe8565b614add60608301876148c9565b614aea60808301866148c9565b614af760a08301856141c8565b614b0460c08301846141c8565b98975050505050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614b727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614b35565b614b7c8683614b35565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614bb9614bb4614baf84613cfd565b614b94565b613cfd565b9050919050565b6000819050919050565b614bd383614b9e565b614be7614bdf82614bc0565b848454614b42565b825550505050565b600090565b614bfc614bef565b614c07818484614bca565b505050565b5b81811015614c2b57614c20600082614bf4565b600181019050614c0d565b5050565b601f821115614c7057614c4181614b10565b614c4a84614b25565b81016020851015614c59578190505b614c6d614c6585614b25565b830182614c0c565b50505b505050565b600082821c905092915050565b6000614c9360001984600802614c75565b1980831691505092915050565b6000614cac8383614c82565b9150826002028217905092915050565b614cc582613ee8565b67ffffffffffffffff811115614cde57614cdd613d4e565b5b614ce88254614a70565b614cf3828285614c2f565b600060209050601f831160018114614d265760008415614d14578287015190505b614d1e8582614ca0565b865550614d86565b601f198416614d3486614b10565b60005b82811015614d5c57848901518255600182019150602085019450602081019050614d37565b86831015614d795784890151614d75601f891682614c82565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b6000614da482613ee8565b614dae8185614d8e565b9350614dbe818560208601613f04565b80840191505092915050565b6000614dd68284614d99565b915081905092915050565b60008160601b9050919050565b6000614df982614de1565b9050919050565b6000614e0b82614dee565b9050919050565b614e23614e1e82613fd6565b614e00565b82525050565b6000819050919050565b614e44614e3f82613cfd565b614e29565b82525050565b6000614e568288614e12565b601482019150614e668287614e12565b601482019150614e768286614e33565b602082019150614e868285614e33565b602082019150614e968284614e33565b6020820191508190509695505050505050565b600060a082019050614ebe6000830188613fe8565b614ecb6020830187613fe8565b614ed860408301866141c8565b614ee560608301856141c8565b614ef260808301846141c8565b9695505050505050565b6000614f17614f12614f0d84614314565b614b94565b613cfd565b9050919050565b614f2781614efc565b82525050565b6000606082019050614f426000830186613fe8565b614f4f6020830185613fe8565b614f5c6040830184614f1e565b949350505050565b6000604082019050614f7960008301856148c9565b614f866020830184613fe8565b9392505050565b6000602082019050614fa26000830184614f1e565b92915050565b600081519050614fb781614012565b92915050565b600060208284031215614fd357614fd2613c38565b5b6000614fe184828501614fa8565b91505092915050565b6000614ff68285614d99565b91506150028284614d99565b91508190509392505050565b60006040820190506150236000830185613fe8565b61503060208301846148c9565b9392505050565b600060208201905061504c60008301846148c9565b92915050565b600081519050919050565b600082825260208201905092915050565b600061507982615052565b615083818561505d565b9350615093818560208601613f04565b61509c81613d3d565b840191505092915050565b60006080820190506150bc6000830187613fe8565b6150c96020830186613fe8565b6150d660408301856141c8565b81810360608301526150e8818461506e565b905095945050505050565b60008151905061510281613c6e565b92915050565b60006020828403121561511e5761511d613c38565b5b600061512c848285016150f3565b9150509291505056fea2646970667358221220440223d1e69434c4bd782d8580b4f378cd5367bd89f8c0cd6834f6c75aeba3b064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009416d65726963616e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055661756c74000000000000000000000000000000000000000000000000000000