[ { "inputs": [ { "internalType": "string", "name": "uri_", "type": "string" }, { "internalType": "address", "name": "ccipRouterAddress", "type": "address" }, { "internalType": "address", "name": "linkTokenAddress", "type": "address" }, { "internalType": "uint64", "name": "currentChainSelector", "type": "uint64" }, { "internalType": "address", "name": "functionsRouterAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "chainSelector", "type": "uint64" } ], "name": "ChainNotEnabled", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "msgSender", "type": "address" } ], "name": "ERC1155Core_CallerIsNotIssuerOrItself", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [], "name": "EmptyArgs", "type": "error" }, { "inputs": [], "name": "EmptySource", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "FailedToWithdrawEth", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "router", "type": "address" } ], "name": "InvalidRouter", "type": "error" }, { "inputs": [], "name": "NoInlineSecrets", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "currentBalance", "type": "uint256" }, { "internalType": "uint256", "name": "calculatedFees", "type": "uint256" } ], "name": "NotEnoughBalanceForFees", "type": "error" }, { "inputs": [], "name": "NothingToWithdraw", "type": "error" }, { "inputs": [], "name": "OnlyAutomationForwarderOrOwnerCanCall", "type": "error" }, { "inputs": [], "name": "OnlyRouterCanFulfill", "type": "error" }, { "inputs": [ { "internalType": "uint64", "name": "chainSelector", "type": "uint64" } ], "name": "OperationNotAllowedOnCurrentChain", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "SenderNotEnabled", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "chainSelector", "type": "uint64" } ], "name": "ChainDisabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "chainSelector", "type": "uint64" }, { "indexed": false, "internalType": "address", "name": "xNftAddress", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "ccipExtraArgs", "type": "bytes" } ], "name": "ChainEnabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "sourceChainSelector", "type": "uint64" }, { "indexed": false, "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64" } ], "name": "CrossChainReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "sourceChainSelector", "type": "uint64" }, { "indexed": false, "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64" } ], "name": "CrossChainSent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "OwnershipTransferRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "RequestFulfilled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "RequestSent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "issuer", "type": "address" } ], "name": "SetIssuer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "messageId", "type": "bytes32" }, { "internalType": "uint64", "name": "sourceChainSelector", "type": "uint64" }, { "internalType": "bytes", "name": "sender", "type": "bytes" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "internalType": "struct Client.EVMTokenAmount[]", "name": "destTokenAmounts", "type": "tuple[]" } ], "internalType": "struct Client.Any2EVMMessage", "name": "message", "type": "tuple" } ], "name": "ccipReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64" }, { "internalType": "enum CrossChainBurnAndMintERC1155.PayFeesIn", "name": "payFeesIn", "type": "uint8" } ], "name": "crossChainTransferFrom", "outputs": [ { "internalType": "bytes32", "name": "messageId", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "chainSelector", "type": "uint64" } ], "name": "disableChain", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "chainSelector", "type": "uint64" }, { "internalType": "address", "name": "xNftAddress", "type": "address" }, { "internalType": "bytes", "name": "ccipExtraArgs", "type": "bytes" } ], "name": "enableChain", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNftMetadata", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getPriceDetails", "outputs": [ { "components": [ { "internalType": "uint80", "name": "listPrice", "type": "uint80" }, { "internalType": "uint80", "name": "originalListPrice", "type": "uint80" }, { "internalType": "uint80", "name": "taxAssessedValue", "type": "uint80" } ], "internalType": "struct RealEstatePriceDetails.PriceDetails", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPrices", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "requestId", "type": "bytes32" }, { "internalType": "bytes", "name": "response", "type": "bytes" }, { "internalType": "bytes", "name": "err", "type": "bytes" } ], "name": "handleOracleFulfillment", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" }, { "internalType": "string", "name": "_tokenUri", "type": "string" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "_amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "_data", "type": "bytes" }, { "internalType": "string[]", "name": "_tokenUris", "type": "string[]" } ], "name": "mintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "destChainSelector", "type": "uint64" } ], "name": "s_chains", "outputs": [ { "internalType": "address", "name": "xNftAddress", "type": "address" }, { "internalType": "bytes", "name": "ccipExtraArgsBytes", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "automationForwarderAddress", "type": "address" } ], "name": "setAutomationForwarder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_issuer", "type": "address" } ], "name": "setIssuer", "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": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "tokenId", "type": "string" }, { "internalType": "uint64", "name": "subscriptionId", "type": "uint64" }, { "internalType": "uint32", "name": "gasLimit", "type": "uint32" }, { "internalType": "bytes32", "name": "donID", "type": "bytes32" } ], "name": "updatePriceDetails", "outputs": [ { "internalType": "bytes32", "name": "requestId", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_beneficiary", "type": "address" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_beneficiary", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" } ], "name": "withdrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
61056060405261043b6101008181529061477f6101203960059061002390826102ae565b50604051806102e001604052806102b18152602001614bba6102b1913960069061004d90826102ae565b5034801561005a57600080fd5b50604051614e6b380380614e6b8339810160408190526100799161039f565b80858585858333806000888461008e81610155565b506001600160a01b0390811660805282166100f05760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600780546001600160a01b0319166001600160a01b03848116919091179091558116156101205761012081610165565b50506001600b5550506001600160a01b0392831660a052911660c0526001600160401b031660e052506104ae95505050505050565b600261016182826102ae565b5050565b336001600160a01b038216036101bd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016100e7565b600880546001600160a01b0319166001600160a01b03838116918217909255600754604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061023957607f821691505b60208210810361025957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156102a957806000526020600020601f840160051c810160208510156102865750805b601f840160051c820191505b818110156102a65760008155600101610292565b50505b505050565b81516001600160401b038111156102c7576102c761020f565b6102db816102d58454610225565b8461025f565b6020601f82116001811461030f57600083156102f75750848201515b600019600385901b1c1916600184901b1784556102a6565b600084815260208120601f198516915b8281101561033f578785015182556020948501946001909201910161031f565b508482101561035d5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b80516001600160a01b038116811461038357600080fd5b919050565b80516001600160401b038116811461038357600080fd5b600080600080600060a086880312156103b757600080fd5b85516001600160401b038111156103cd57600080fd5b8601601f810188136103de57600080fd5b80516001600160401b038111156103f7576103f761020f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104255761042561020f565b6040528181528282016020018a101561043d57600080fd5b60005b8281101561045c57602081850181015183830182015201610440565b506000602083830101528097505050506104786020870161036c565b93506104866040870161036c565b925061049460608701610388565b91506104a26080870161036c565b90509295509295909350565b60805160a05160c05160e05161424b6105346000396000818161060501528181610e1c01528181610f9101526115cb01526000818161091d01528181610ac201528181610b510152610c2e015260008181610a0501528181610bff01528181610cb301528181610d750152611439015260008181610581015261212d015261424b6000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c806379ba50971161010f578063c1341c4f116100a2578063f0ed2e8011610071578063f0ed2e801461044d578063f242432a146104f0578063f2fde38b14610503578063f5298aca1461051657600080fd5b8063c1341c4f1461040c578063d40d17bc1461041f578063e6b46ff514610432578063e985e9c51461043a57600080fd5b8063a843a0ab116100de578063a843a0ab146103be578063b942f8cb146103d1578063bd85b039146103e4578063bd9a548b1461040457600080fd5b806379ba50971461037557806385572ffb1461037d5780638da5cb5b14610390578063a22cb465146103ab57600080fd5b80633aeac4e11161018757806351cff8d91161015657806351cff8d91461031b57806355cc4e571461032e5780635dc5ebdb146103415780636b20c4541461036257600080fd5b80633aeac4e1146102b357806341eade46146102c65780634e1273f4146102d95780634f558e79146102f957600080fd5b80630e89341c116101c35780630e89341c1461026557806318160ddd14610285578063240b3b491461028d5780632eb2c2d6146102a057600080fd5b8062fdd58e146101f457806301ffc9a71461021a5780630ca761751461023d5780630ce639c414610252575b600080fd5b6102076102023660046130f4565b610529565b6040519081526020015b60405180910390f35b61022d610228366004613136565b610551565b6040519015158152602001610211565b61025061024b366004613219565b610576565b005b6102506102603660046132a5565b6105fa565b6102786102733660046132ee565b610709565b6040516102119190613357565b600454610207565b61020761029b36600461336a565b6107c7565b6102506102ae366004613493565b610e70565b6102506102c136600461354a565b610ed7565b6102506102d4366004613583565b610f86565b6102ec6102e736600461359e565b611062565b6040516102119190613699565b61022d6103073660046132ee565b600090815260036020526040902054151590565b6102506103293660046136ac565b61112e565b61025061033c3660046136ac565b6111e5565b61035461034f366004613583565b611237565b6040516102119291906136c9565b6102506103703660046136f5565b6112e6565b610250611380565b61025061038b366004613764565b61142e565b6007546040516001600160a01b039091168152602001610211565b6102506103b93660046137ac565b61161c565b6102076103cc3660046137da565b61162b565b6102506103df3660046138cc565b61178e565b6102076103f23660046132ee565b60009081526003602052604090205490565b61027861183c565b61025061041a36600461398e565b6118ca565b61025061042d3660046136ac565b611929565b610278611953565b61022d61044836600461354a565b611960565b6104bb61045b3660046132ee565b604080516060808201835260008083526020808401829052928401819052938452600e825292829020825193840183525469ffffffffffffffffffff8082168552600160501b8204811692850192909252600160a01b9004169082015290565b60408051825169ffffffffffffffffffff90811682526020808501518216908301529282015190921690820152606001610211565b6102506104fe3660046139e6565b61198e565b6102506105113660046136ac565b6119ed565b610250610524366004613a42565b6119fe565b6000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b031982166385572ffb60e01b148061054b575061054b82611a6f565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105bf5760405163c6829f8360e01b815260040160405180910390fd5b6105ca838383611abf565b60405183907f85e1543bf2f84fe80c6badbce3648c8539ad1df4d2b3d822938ca0538be727e690600090a2505050565b610602611b81565b827f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316816001600160401b031603610665576040516340d8e3a160e01b81526001600160401b03821660048201526024015b60405180910390fd5b6040805180820182526001600160a01b03858116825260208083018681526001600160401b0389166000908152600c909252939020825181546001600160a01b0319169216919091178155915190919060018201906106c49082613af8565b509050507f59cc0b49d3359ac35e3872e99199469b6a1025c9a945cd9b6a411bffe337272d8484846040516106fb93929190613bb6565b60405180910390a150505050565b6000818152600a602052604081208054606092919061072790613a77565b80601f016020809104026020016040519081016040528092919081815260200182805461075390613a77565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b5050505050905060008151116107be576107b983611bd6565b6107c0565b805b9392505050565b60006107d1611c6a565b6001600160401b0383166000908152600c602052604090205483906001600160a01b031661081d57604051630e19fdf760e11b81526001600160401b038216600482015260240161065c565b600061082888610709565b90506108358a89896119fe565b6040805160a0810182526001600160401b0387166000908152600c602052918220546001600160a01b031660c08201528060e0810160405160208183030381529060405281526020018c8c8c8c8c8860405160200161089996959493929190613bf2565b60408051601f19818403018152919052815260200160006040519080825280602002602001820160405280156108f557816020015b60408051808201909152600080825260208201528152602001906001900390816108ce5790505b508152602001600187600181111561090f5761090f613c4b565b1461091b57600061093d565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03168152602001600c6000896001600160401b03166001600160401b03168152602001908152602001600020600101805461097e90613a77565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa90613a77565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b5050505050815250905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320487ded88846040518363ffffffff1660e01b8152600401610a51929190613c61565b602060405180830381865afa158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a929190613d36565b90506001866001811115610aa857610aa8613c4b565b03610d34576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b359190613d36565b811115610be8576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc49190613d36565b6040516328fdcaa160e01b815260048101919091526024810182905260440161065c565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b9190613d4f565b506040516396f4e9f960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906396f4e9f990610cea908a908690600401613c61565b6020604051808303816000875af1158015610d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2d9190613d36565b9450610df4565b47811115610d5e576040516328fdcaa160e01b81524760048201526024810182905260440161065c565b6040516396f4e9f960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906396f4e9f9908390610dae908b908790600401613c61565b60206040518083038185885af1158015610dcc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610df19190613d36565b94505b7f300e6c20d2e9d8db9b2df40ebce943d9dae3fa3a8eaec841a3d1cb9a1e8b6ad78c8c8c8c8c7f00000000000000000000000000000000000000000000000000000000000000008d604051610e4f9796959493929190613d6c565b60405180910390a150505050610e656001600b55565b979650505050505050565b336001600160a01b0386168114801590610e915750610e8f8682611960565b155b15610ec25760405163711bec9160e11b81526001600160a01b0380831660048301528716602482015260440161065c565b610ecf8686868686611c94565b505050505050565b610edf611b81565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a9190613d36565b905080600003610f6d57604051630686827b60e51b815260040160405180910390fd5b610f816001600160a01b0383168483611cfb565b505050565b610f8e611b81565b807f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316816001600160401b031603610fec576040516340d8e3a160e01b81526001600160401b038216600482015260240161065c565b6001600160401b0382166000908152600c6020526040812080546001600160a01b0319168155906110206001830182613057565b50506040516001600160401b03831681527f67e02000179a6045f4db8fb1b09f01e170b0347e0b698fc5112ce4d798ef19f69060200160405180910390a15050565b606081518351146110935781518351604051635b05999160e01b81526004810192909252602482015260440161065c565b600083516001600160401b038111156110ae576110ae613153565b6040519080825280602002602001820160405280156110d7578160200160208202803683370190505b50905060005b84518110156111265760208082028601015161110190602080840287010151610529565b82828151811061111357611113613dca565b60209081029190910101526001016110dd565b509392505050565b611136611b81565b47600081900361115957604051630686827b60e51b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146111a6576040519150601f19603f3d011682016040523d82523d6000602084013e6111ab565b606091505b5050905080610f8157604051639d11f56360e01b81523360048201526001600160a01b03841660248201526044810183905260640161065c565b6111ed611b81565b600980546001600160a01b0319166001600160a01b0383169081179091556040517fd56ed7b1c1110348b1fbf418469f6fc4acc32d9b675e9e1e448cc19169a64ca090600090a250565b600c60205260009081526040902080546001820180546001600160a01b03909216929161126390613a77565b80601f016020809104026020016040519081016040528092919081815260200182805461128f90613a77565b80156112dc5780601f106112b1576101008083540402835291602001916112dc565b820191906000526020600020905b8154815290600101906020018083116112bf57829003601f168201915b5050505050905082565b33301480159061130157506009546001600160a01b03163314155b1561132157604051637725137960e11b815233600482015260240161065c565b6001600160a01b0383163314801590611341575061133f8333611960565b155b1561137557335b60405163711bec9160e11b81526001600160a01b039182166004820152908416602482015260440161065c565b610f81838383611d4d565b6008546001600160a01b031633146113d35760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604482015260640161065c565b600780546001600160a01b0319808216339081179093556008805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611479576040516335fdcccd60e21b815233600482015260240161065c565b611481611c6a565b6114916040820160208301613583565b6001600160401b0381166000908152600c60205260409020546001600160a01b03166114db57604051630e19fdf760e11b81526001600160401b038216600482015260240161065c565b6114eb6040830160208401613583565b6114f86040840184613de0565b81019061150591906136ac565b6001600160401b0382166000908152600c60205260409020546001600160a01b038281169116146115545760405163baf46cd160e01b81526001600160a01b038216600482015260240161065c565b60006115666040860160208701613583565b90506000808080808061157c60608c018c613de0565b8101906115899190613e2d565b9550955095509550955095506115a285858585856118ca565b7f8a69e2b5fbcc69a1f5d6326fb26db5bc43cd18d09d2e79a48a50b77da16432f986868686868c7f00000000000000000000000000000000000000000000000000000000000000006040516115fd9796959493929190613d6c565b60405180910390a1505050505050505050506116196001600b55565b50565b611627338383611d93565b5050565b600d546000906001600160a01b0316331480159061165457506007546001600160a01b03163314155b15611672576040516302dc7d2f60e21b815260040160405180910390fd5b6116b36040805160e0810190915280600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b611723306001600160a01b031663bd9a548b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261171c9190810190613ecb565b8290611e29565b604080516001808252818301909252600091816020015b606081526020019060019003908161173a579050509050868160008151811061176557611765613dca565b602090810291909101015261177a8282611e36565b610e6561178683611e60565b878787612128565b3330148015906117a957506009546001600160a01b03163314155b156117c957604051637725137960e11b815233600482015260240161065c565b6117d5858585856121fa565b60005b8451811015610ecf578181815181106117f3576117f3613dca565b6020026020010151600a600087848151811061181157611811613dca565b6020026020010151815260200190815260200160002090816118339190613af8565b506001016117d8565b6006805461184990613a77565b80601f016020809104026020016040519081016040528092919081815260200182805461187590613a77565b80156118c25780601f10611897576101008083540402835291602001916118c2565b820191906000526020600020905b8154815290600101906020018083116118a557829003601f168201915b505050505081565b3330148015906118e557506009546001600160a01b03163314155b1561190557604051637725137960e11b815233600482015260240161065c565b61191185858585612238565b6000848152600a60205260409020610ecf8282613af8565b611931611b81565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005805461184990613a77565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b336001600160a01b03861681148015906119af57506119ad8682611960565b155b156119e05760405163711bec9160e11b81526001600160a01b0380831660048301528716602482015260440161065c565b610ecf8686868686612295565b6119f5611b81565b61161981612323565b333014801590611a1957506009546001600160a01b03163314155b15611a3957604051637725137960e11b815233600482015260240161065c565b6001600160a01b0383163314801590611a595750611a578333611960565b155b15611a645733611348565b610f818383836123cd565b60006001600160e01b03198216636cdb3d1360e11b1480611aa057506001600160e01b031982166303a24d0760e21b145b8061054b57506301ffc9a760e01b6001600160e01b031983161461054b565b805115611ae0578060405162461bcd60e51b815260040161065c9190613357565b60008060008085806020019051810190611afa9190613f38565b6040805160608101825269ffffffffffffffffffff948516815292841660208085019182529285168483019081526000968752600e909352942091518254945191518416600160a01b0269ffffffffffffffffffff60a01b19928516600160501b026001600160a01b03199096169190941617939093179290921617905550505050505050565b6007546001600160a01b03163314611bd45760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604482015260640161065c565b565b606060028054611be590613a77565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1190613a77565b8015611c5e5780601f10611c3357610100808354040283529160200191611c5e565b820191906000526020600020905b815481529060010190602001808311611c4157829003601f168201915b50505050509050919050565b6002600b5403611c8d57604051633ee5aeb560e01b815260040160405180910390fd5b6002600b55565b6001600160a01b038416611cbe57604051632bfa23e760e11b81526000600482015260240161065c565b6001600160a01b038516611ce757604051626a0d4560e21b81526000600482015260240161065c565b611cf48585858585612431565b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f81908490612484565b6001600160a01b038316611d7657604051626a0d4560e21b81526000600482015260240161065c565b610f81836000848460405180602001604052806000815250612431565b6001600160a01b038216611dbc5760405162ced3e160e81b81526000600482015260240161065c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61162782600080846124e7565b8051600003611e585760405163fe936cb760e01b815260040160405180910390fd5b60a090910152565b60606000611e6f610100612565565b9050611ea86040518060400160405280600c81526020016b31b7b232a637b1b0ba34b7b760a11b8152508261258690919063ffffffff16565b8251611ec6906002811115611ebf57611ebf613c4b565b829061259f565b6040805180820190915260088152676c616e677561676560c01b6020820152611ef0908290612586565b6040830151611f07908015611ebf57611ebf613c4b565b604080518082019091526006815265736f7572636560d01b6020820152611f2f908290612586565b6060830151611f3f908290612586565b60a08301515115611fcb576040805180820190915260048152636172677360e01b6020820152611f70908290612586565b611f79816125d8565b60005b8360a0015151811015611fc157611fb98460a001518281518110611fa257611fa2613dca565b60200260200101518361258690919063ffffffff16565b600101611f7c565b50611fcb816125fc565b6080830151511561208f57600083602001516002811115611fee57611fee613c4b565b0361200c5760405163a80d31f760e01b815260040160405180910390fd5b60408051808201909152600f81526e39b2b1b932ba39a637b1b0ba34b7b760891b602082015261203d908290612586565b61205683602001516002811115611ebf57611ebf613c4b565b6040805180820190915260078152667365637265747360c81b602082015261207f908290612586565b608083015161208f90829061261a565b60c083015151156121205760408051808201909152600981526862797465734172677360b81b60208201526120c5908290612586565b6120ce816125d8565b60005b8360c00151518110156121165761210e8460c0015182815181106120f7576120f7613dca565b60200260200101518361261a90919063ffffffff16565b6001016120d1565b50612120816125fc565b515192915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663461d27628688600188886040518663ffffffff1660e01b8152600401612180959493929190613f6e565b6020604051808303816000875af115801561219f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c39190613d36565b60405190915081907f1131472297a800fee664d1d89cfa8f7676ff07189ecc53f80bbb5f4969099db890600090a295945050505050565b6001600160a01b03841661222457604051632bfa23e760e11b81526000600482015260240161065c565b612232600085858585612431565b50505050565b6001600160a01b03841661226257604051632bfa23e760e11b81526000600482015260240161065c565b60408051600180825260208201869052818301908152606082018590526080820190925290610ecf600087848487612431565b6001600160a01b0384166122bf57604051632bfa23e760e11b81526000600482015260240161065c565b6001600160a01b0385166122e857604051626a0d4560e21b81526000600482015260240161065c565b6040805160018082526020820186905281830190815260608201859052608082019092529061231a8787848487612431565b50505050505050565b336001600160a01b0382160361237b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161065c565b600880546001600160a01b0319166001600160a01b03838116918217909255600754604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6001600160a01b0383166123f657604051626a0d4560e21b81526000600482015260240161065c565b604080516001808252602082018590528183019081526060820184905260a08201909252600060808201818152919291611cf4918791859085905b61243d85858585612627565b6001600160a01b03841615611cf45782513390600103612476576020848101519084015161246f83898985858961276d565b5050610ecf565b610ecf818787878787612891565b60006124996001600160a01b0384168361297a565b905080516000141580156124be5750808060200190518101906124bc9190613d4f565b155b15610f8157604051635274afe760e01b81526001600160a01b038416600482015260240161065c565b8051600003612509576040516322ce3edd60e01b815260040160405180910390fd5b8383600281111561251c5761251c613c4b565b9081600281111561252f5761252f613c4b565b9052506040840182801561254557612545613c4b565b9081801561255557612555613c4b565b9052506060909301929092525050565b61256d613091565b80516125799083612988565b5060006020820152919050565b61259382600383516129ff565b8151610f819082612b18565b81516125ac9060c2612b39565b5061162782826040516020016125c491815260200190565b60405160208183030381529060405261261a565b6125e3816004612ba2565b6001816020018181516125f69190613fcd565b90525050565b612607816007612ba2565b6001816020018181516125f69190613fe0565b61259382600283516129ff565b61263384848484612bb9565b6001600160a01b0384166126dd576000805b83518110156126c357600083828151811061266257612662613dca565b60200260200101519050806003600087858151811061268357612683613dca565b6020026020010151815260200190815260200160002060008282546126a89190613fcd565b909155506126b890508184613fcd565b925050600101612645565b5080600460008282546126d69190613fcd565b9091555050505b6001600160a01b038316612232576000805b835181101561275c57600083828151811061270c5761270c613dca565b60200260200101519050806003600087858151811061272d5761272d613dca565b6020908102919091018101518252810191909152604001600020805491909103905591909101906001016126ef565b506004805491909103905550505050565b6001600160a01b0384163b15610ecf5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906127b19089908990889088908890600401613ff3565b6020604051808303816000875af19250505080156127ec575060408051601f3d908101601f191682019092526127e99181019061402d565b60015b612855573d80801561281a576040519150601f19603f3d011682016040523d82523d6000602084013e61281f565b606091505b50805160000361284d57604051632bfa23e760e11b81526001600160a01b038616600482015260240161065c565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b1461231a57604051632bfa23e760e11b81526001600160a01b038616600482015260240161065c565b6001600160a01b0384163b15610ecf5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906128d5908990899088908890889060040161404a565b6020604051808303816000875af1925050508015612910575060408051601f3d908101601f1916820190925261290d9181019061402d565b60015b61293e573d80801561281a576040519150601f19603f3d011682016040523d82523d6000602084013e61281f565b6001600160e01b0319811663bc197c8160e01b1461231a57604051632bfa23e760e11b81526001600160a01b038616600482015260240161065c565b60606107c083836000612dcd565b6040805180820190915260608152600060208201526129a86020836140a8565b156129d0576129b86020836140a8565b6129c3906020613fe0565b6129cd9083613fcd565b91505b6020808401839052604051808552600081529081840101818110156129f457600080fd5b604052509192915050565b6017816001600160401b031611612a255782516122329060e0600585901b168317612b39565b60ff816001600160401b031611612a65578251612a4d906018611fe0600586901b1617612b39565b508251612232906001600160401b0383166001612e6a565b61ffff816001600160401b031611612aa6578251612a8e906019611fe0600586901b1617612b39565b508251612232906001600160401b0383166002612e6a565b63ffffffff816001600160401b031611612ae9578251612ad190601a611fe0600586901b1617612b39565b508251612232906001600160401b0383166004612e6a565b8251612b0090601b611fe0600586901b1617612b39565b508251612232906001600160401b0383166008612e6a565b6040805180820190915260608152600060208201526107c083838451612eef565b6040805180820190915260608152600060208201528251516000612b5e826001613fcd565b905084602001518210612b7f57612b7f85612b7a8360026140ca565b612fc0565b8451602083820101858153508051821115612b98578181525b5093949350505050565b8151610f8190601f611fe0600585901b1617612b39565b8051825114612be85781518151604051635b05999160e01b81526004810192909252602482015260440161065c565b3360005b8351811015612cee576020818102858101820151908501909101516001600160a01b03881615612c9f576000828152602081815260408083206001600160a01b038c16845290915290205481811015612c78576040516303dee4c560e01b81526001600160a01b038a16600482015260248101829052604481018390526064810184905260840161065c565b6000838152602081815260408083206001600160a01b038d16845290915290209082900390555b6001600160a01b03871615612ce4576000828152602081815260408083206001600160a01b038b16845290915281208054839290612cde908490613fcd565b90915550505b5050600101612bec565b508251600103612d6f5760208301516000906020840151909150856001600160a01b0316876001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612d60929190918252602082015260400190565b60405180910390a45050611cf4565b836001600160a01b0316856001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612dbe9291906140e1565b60405180910390a45050505050565b606081471015612df25760405163cd78605960e01b815230600482015260240161065c565b600080856001600160a01b03168486604051612e0e9190614106565b60006040518083038185875af1925050503d8060008114612e4b576040519150601f19603f3d011682016040523d82523d6000602084013e612e50565b606091505b5091509150612e60868383612fd7565b9695505050505050565b6040805180820190915260608152600060208201528351516000612e8e8285613fcd565b90508560200151811115612eab57612eab86612b7a8360026140ca565b60006001612ebb86610100614209565b612ec59190613fe0565b90508651828101878319825116178152508051831115612ee3578281525b50959695505050505050565b6040805180820190915260608152600060208201528251821115612f1257600080fd5b8351516000612f218483613fcd565b90508560200151811115612f3e57612f3e86612b7a8360026140ca565b855180518382016020019160009180851115612f58578482525b505050602086015b60208610612f985780518252612f77602083613fcd565b9150612f84602082613fcd565b9050612f91602087613fe0565b9550612f60565b51815160001960208890036101000a0190811690199190911617905250849150509392505050565b8151612fcc8383612988565b506122328382612b18565b606082612fe7576107b98261302e565b8151158015612ffe57506001600160a01b0384163b155b1561302757604051639996b31560e01b81526001600160a01b038516600482015260240161065c565b50806107c0565b80511561303e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461306390613a77565b6000825580601f10613073575050565b601f01602090049060005260206000209081019061161991906130c6565b60405180604001604052806130b9604051806040016040528060608152602001600081525090565b8152602001600081525090565b5b808211156130db57600081556001016130c7565b5090565b6001600160a01b038116811461161957600080fd5b6000806040838503121561310757600080fd5b8235613112816130df565b946020939093013593505050565b6001600160e01b03198116811461161957600080fd5b60006020828403121561314857600080fd5b81356107c081613120565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561319157613191613153565b604052919050565b60006001600160401b038211156131b2576131b2613153565b50601f01601f191660200190565b600082601f8301126131d157600080fd5b81356020830160006131ea6131e584613199565b613169565b90508281528583830111156131fe57600080fd5b82826020830137600092810160200192909252509392505050565b60008060006060848603121561322e57600080fd5b8335925060208401356001600160401b0381111561324b57600080fd5b613257868287016131c0565b92505060408401356001600160401b0381111561327357600080fd5b61327f868287016131c0565b9150509250925092565b80356001600160401b03811681146132a057600080fd5b919050565b6000806000606084860312156132ba57600080fd5b6132c384613289565b925060208401356132d3816130df565b915060408401356001600160401b0381111561327357600080fd5b60006020828403121561330057600080fd5b5035919050565b60005b8381101561332257818101518382015260200161330a565b50506000910152565b60008151808452613343816020860160208601613307565b601f01601f19169290920160200192915050565b6020815260006107c0602083018461332b565b600080600080600080600060e0888a03121561338557600080fd5b8735613390816130df565b965060208801356133a0816130df565b9550604088013594506060880135935060808801356001600160401b038111156133c957600080fd5b6133d58a828b016131c0565b9350506133e460a08901613289565b915060c0880135600281106133f857600080fd5b8091505092959891949750929550565b60006001600160401b0382111561342157613421613153565b5060051b60200190565b600082601f83011261343c57600080fd5b813561344a6131e582613408565b8082825260208201915060208360051b86010192508583111561346c57600080fd5b602085015b83811015613489578035835260209283019201613471565b5095945050505050565b600080600080600060a086880312156134ab57600080fd5b85356134b6816130df565b945060208601356134c6816130df565b935060408601356001600160401b038111156134e157600080fd5b6134ed8882890161342b565b93505060608601356001600160401b0381111561350957600080fd5b6135158882890161342b565b92505060808601356001600160401b0381111561353157600080fd5b61353d888289016131c0565b9150509295509295909350565b6000806040838503121561355d57600080fd5b8235613568816130df565b91506020830135613578816130df565b809150509250929050565b60006020828403121561359557600080fd5b6107c082613289565b600080604083850312156135b157600080fd5b82356001600160401b038111156135c757600080fd5b8301601f810185136135d857600080fd5b80356135e66131e582613408565b8082825260208201915060208360051b85010192508783111561360857600080fd5b6020840193505b82841015613633578335613622816130df565b82526020938401939091019061360f565b945050505060208301356001600160401b0381111561365157600080fd5b61365d8582860161342b565b9150509250929050565b600081518084526020840193506020830160005b82811015612b9857815186526020958601959091019060010161367b565b6020815260006107c06020830184613667565b6000602082840312156136be57600080fd5b81356107c0816130df565b6001600160a01b03831681526040602082018190526000906136ed9083018461332b565b949350505050565b60008060006060848603121561370a57600080fd5b8335613715816130df565b925060208401356001600160401b0381111561373057600080fd5b61373c8682870161342b565b92505060408401356001600160401b0381111561375857600080fd5b61327f8682870161342b565b60006020828403121561377657600080fd5b81356001600160401b0381111561378c57600080fd5b820160a081850312156107c057600080fd5b801515811461161957600080fd5b600080604083850312156137bf57600080fd5b82356137ca816130df565b915060208301356135788161379e565b600080600080608085870312156137f057600080fd5b84356001600160401b0381111561380657600080fd5b613812878288016131c0565b94505061382160208601613289565b9250604085013563ffffffff8116811461383a57600080fd5b9396929550929360600135925050565b600082601f83011261385b57600080fd5b81356138696131e582613408565b8082825260208201915060208360051b86010192508583111561388b57600080fd5b602085015b838110156134895780356001600160401b038111156138ae57600080fd5b6138bd886020838a01016131c0565b84525060209283019201613890565b600080600080600060a086880312156138e457600080fd5b85356138ef816130df565b945060208601356001600160401b0381111561390a57600080fd5b6139168882890161342b565b94505060408601356001600160401b0381111561393257600080fd5b61393e8882890161342b565b93505060608601356001600160401b0381111561395a57600080fd5b613966888289016131c0565b92505060808601356001600160401b0381111561398257600080fd5b61353d8882890161384a565b600080600080600060a086880312156139a657600080fd5b85356139b1816130df565b9450602086013593506040860135925060608601356001600160401b038111156139da57600080fd5b613515888289016131c0565b600080600080600060a086880312156139fe57600080fd5b8535613a09816130df565b94506020860135613a19816130df565b9350604086013592506060860135915060808601356001600160401b0381111561353157600080fd5b600080600060608486031215613a5757600080fd5b8335613a62816130df565b95602085013595506040909401359392505050565b600181811c90821680613a8b57607f821691505b602082108103613aab57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610f8157806000526020600020601f840160051c81016020851015613ad85750805b601f840160051c820191505b81811015611cf45760008155600101613ae4565b81516001600160401b03811115613b1157613b11613153565b613b2581613b1f8454613a77565b84613ab1565b6020601f821160018114613b595760008315613b415750848201515b600019600385901b1c1916600184901b178455611cf4565b600084815260208120601f198516915b82811015613b895787850151825560209485019460019092019101613b69565b5084821015613ba75786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160401b03841681526001600160a01b0383166020820152606060408201819052600090613be99083018461332b565b95945050505050565b6001600160a01b03878116825286166020820152604081018590526060810184905260c060808201819052600090613c2c9083018561332b565b82810360a0840152613c3e818561332b565b9998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b6001600160401b0383168152604060208201526000825160a06040840152613c8c60e084018261332b565b90506020840151603f19848303016060850152613ca9828261332b565b6040860151858203603f19016080870152805180835260209182019450600093509101905b80831015613d0557835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613cce565b5060608601516001600160a01b031660a08601526080860151858203603f190160c08701529250610e65818461332b565b600060208284031215613d4857600080fd5b5051919050565b600060208284031215613d6157600080fd5b81516107c08161379e565b6001600160a01b03888116825287166020820152604081018690526060810185905260e060808201819052600090613da69083018661332b565b6001600160401b0394851660a08401529290931660c0909101529695505050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112613df757600080fd5b8301803591506001600160401b03821115613e1157600080fd5b602001915036819003821315613e2657600080fd5b9250929050565b60008060008060008060c08789031215613e4657600080fd5b8635613e51816130df565b95506020870135613e61816130df565b9450604087013593506060870135925060808701356001600160401b03811115613e8a57600080fd5b613e9689828a016131c0565b92505060a08701356001600160401b03811115613eb257600080fd5b613ebe89828a016131c0565b9150509295509295509295565b600060208284031215613edd57600080fd5b81516001600160401b03811115613ef357600080fd5b8201601f81018413613f0457600080fd5b8051613f126131e582613199565b818152856020838501011115613f2757600080fd5b613be9826020830160208601613307565b60008060008060808587031215613f4e57600080fd5b505082516020840151604085015160609095015191969095509092509050565b6001600160401b038616815260a060208201526000613f9060a083018761332b565b61ffff9590951660408301525063ffffffff92909216606083015260809091015292915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561054b5761054b613fb7565b8181038181111561054b5761054b613fb7565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090610e659083018461332b565b60006020828403121561403f57600080fd5b81516107c081613120565b6001600160a01b0386811682528516602082015260a06040820181905260009061407690830186613667565b82810360608401526140888186613667565b9050828103608084015261409c818561332b565b98975050505050505050565b6000826140c557634e487b7160e01b600052601260045260246000fd5b500690565b808202811582820484141761054b5761054b613fb7565b6040815260006140f46040830185613667565b8281036020840152613be98185613667565b60008251614118818460208701613307565b9190910192915050565b6001815b600184111561415d5780850481111561414157614141613fb7565b600184161561414f57908102905b60019390931c928002614126565b935093915050565b6000826141745750600161054b565b816141815750600061054b565b816001811461419757600281146141a1576141bd565b600191505061054b565b60ff8411156141b2576141b2613fb7565b50506001821b61054b565b5060208310610133831016604e8410600b84101617156141e0575081810a61054b565b6141ed6000198484614122565b806000190482111561420157614201613fb7565b029392505050565b60006107c0838361416556fea26469706673582212203d08ae4eb6675962458fc92251f0dc7e64c87ad210b510f239c4c151ee6bdf6d64736f6c634300081a0033636f6e7374207b20657468657273207d203d20617761697420696d706f727428276e706d3a65746865727340362e31302e3027293b636f6e73742048617368203d20617761697420696d706f727428276e706d3a697066732d6f6e6c792d6861736840342e302e3027293b636f6e737420617069526573706f6e7365203d2061776169742046756e6374696f6e732e6d616b654874747052657175657374287b2020202075726c3a206068747470733a2f2f6170692e627269646765646174616f75747075742e636f6d2f6170692f76322f4f446174612f746573742f50726f70657274792827505f35646261316662393461613430353562396632393639366627293f6163636573735f746f6b656e3d3662616361353437373432633666393661366666373162313338343234663231602c7d293b636f6e7374207265616c45737461746541646472657373203d20617069526573706f6e73652e646174612e556e706172736564416464726573733b636f6e737420796561724275696c74203d204e756d62657228617069526573706f6e73652e646174612e596561724275696c74293b636f6e7374206c6f7453697a6553717561726546656574203d204e756d62657228617069526573706f6e73652e646174612e4c6f7453697a6553717561726546656574293b636f6e7374206c6976696e6741726561203d204e756d62657228617069526573706f6e73652e646174612e4c6976696e6741726561293b636f6e737420626564726f6f6d73546f74616c203d204e756d62657228617069526573706f6e73652e646174612e426564726f6f6d73546f74616c293b636f6e7374206d65746164617461203d207b6e616d653a20605265616c2045737461746520546f6b656e602c617474726962757465733a205b7b2074726169745f747970653a20607265616c45737461746541646472657373602c2076616c75653a207265616c45737461746541646472657373207d2c7b2074726169745f747970653a2060796561724275696c74602c2076616c75653a20796561724275696c74207d2c7b2074726169745f747970653a20606c6f7453697a6553717561726546656574602c2076616c75653a206c6f7453697a6553717561726546656574207d2c7b2074726169745f747970653a20606c6976696e6741726561602c2076616c75653a206c6976696e6741726561207d2c7b2074726169745f747970653a2060626564726f6f6d73546f74616c602c2076616c75653a20626564726f6f6d73546f74616c207d5d7d3b636f6e7374206d65746164617461537472696e67203d204a534f4e2e737472696e67696679286d65746164617461293b636f6e73742069706673436964203d20617761697420486173682e6f66286d65746164617461537472696e67293b72657475726e2046756e6374696f6e732e656e636f6465537472696e672860697066733a2f2f247b697066734369647d60293b636f6e7374207b20657468657273207d203d20617761697420696d706f727428276e706d3a65746865727340362e31302e3027293b636f6e737420616269436f646572203d206574686572732e416269436f6465722e64656661756c74416269436f64657228293b636f6e737420746f6b656e4964203d20617267735b305d3b636f6e737420617069526573706f6e7365203d2061776169742046756e6374696f6e732e6d616b654874747052657175657374287b2020202075726c3a206068747470733a2f2f6170692e627269646765646174616f75747075742e636f6d2f6170692f76322f4f446174612f746573742f50726f70657274792827505f35646261316662393461613430353562396632393639366627293f6163636573735f746f6b656e3d3662616361353437373432633666393661366666373162313338343234663231602c7d293b636f6e7374206c6973745072696365203d204e756d62657228617069526573706f6e73652e646174612e4c6973745072696365293b636f6e7374206f726967696e616c4c6973745072696365203d204e756d62657228617069526573706f6e73652e646174612e4f726967696e616c4c6973745072696365293b636f6e737420746178417373657373656456616c7565203d204e756d62657228617069526573706f6e73652e646174612e546178417373657373656456616c7565293b636f6e737420656e636f646564203d20616269436f6465722e656e636f6465285b6075696e74323536602c206075696e74323536602c206075696e74323536602c206075696e74323536605d2c205b746f6b656e49642c206c69737450726963652c206f726967696e616c4c69737450726963652c20746178417373657373656456616c75655d293b72657475726e206574686572732e676574427974657328656e636f646564293b00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f694e193200268f9a4868e4aa017a0118c9a81770000000000000000000000000b9d5d9136855f6fec3c0993fee6e9ce8a297846000000000000000000000000000000000000000000000000ccf0a31a221f3c9b000000000000000000000000a9d587a00a31a52ed70d6026794a8fc5e2f5dcb00000000000000000000000000000000000000000000000000000000000000000