{
    "_format": "hh-sol-artifact-1",
    "contractName": "RestrictedNORI",
    "sourceName": "contracts/RestrictedNORI.sol",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [],
            "name": "FunctionDisabled",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "InsufficientClaimableBalance",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "InsufficientUnreleasedTokens",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "InvalidMinter",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "InvalidZeroDuration",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "NonexistentSchedule",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "ScheduleExists",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "SenderNotMarketContract",
            "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": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "quantity",
                    "type": "uint256"
                }
            ],
            "name": "ClaimTokens",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Paused",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "atTime",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "removalId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "quantity",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "scheduleOwners",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "quantitiesBurned",
                    "type": "uint256[]"
                }
            ],
            "name": "RevokeTokens",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "projectId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "endTime",
                    "type": "uint256"
                }
            ],
            "name": "ScheduleCreated",
            "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"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "Unpaused",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "MINTER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PAUSER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "SCHEDULE_CREATOR_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "TOKEN_REVOKER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "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": "scheduleIds",
                    "type": "uint256[]"
                }
            ],
            "name": "batchGetScheduleDetailsForAccount",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenHolder",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "scheduleTokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "balance",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "claimableAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "claimedAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "quantityRevoked",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct ScheduleDetailForAddress[]",
                    "name": "",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256[]",
                    "name": "scheduleIds",
                    "type": "uint256[]"
                }
            ],
            "name": "batchGetScheduleSummaries",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "scheduleTokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "startTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "endTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalSupply",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalClaimableAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalClaimedAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalQuantityRevoked",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address[]",
                            "name": "tokenHolders",
                            "type": "address[]"
                        }
                    ],
                    "internalType": "struct ScheduleSummary[]",
                    "name": "",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "claimableBalanceForSchedule",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "claimableBalanceForScheduleForAccount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "projectId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "startTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint8",
                    "name": "methodology",
                    "type": "uint8"
                },
                {
                    "internalType": "uint8",
                    "name": "methodologyVersion",
                    "type": "uint8"
                }
            ],
            "name": "createSchedule",
            "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": "getAllScheduleIds",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "originalSupplier",
                    "type": "address"
                }
            ],
            "name": "getDeficitForAddress",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "methodology",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "methodologyVersion",
                    "type": "uint256"
                }
            ],
            "name": "getRestrictionDurationForMethodologyAndVersion",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                }
            ],
            "name": "getRoleMember",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleMemberCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "getScheduleDetailForAccount",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenHolder",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "scheduleTokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "balance",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "claimableAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "claimedAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "quantityRevoked",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct ScheduleDetailForAddress",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "getScheduleSummary",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "scheduleTokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "startTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "endTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalSupply",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalClaimableAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalClaimedAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "totalQuantityRevoked",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address[]",
                            "name": "tokenHolders",
                            "type": "address[]"
                        }
                    ],
                    "internalType": "struct ScheduleSummary",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getUnderlyingTokenAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "originalSupplier",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "incrementDeficitForSupplier",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "initialize",
            "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": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "removalId",
                    "type": "uint256"
                }
            ],
            "name": "mint",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes[]",
                    "name": "data",
                    "type": "bytes[]"
                }
            ],
            "name": "multicall",
            "outputs": [
                {
                    "internalType": "bytes[]",
                    "name": "results",
                    "type": "bytes[]"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "pause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "paused",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20WithPermit",
                    "name": "wrappedToken",
                    "type": "address"
                },
                {
                    "internalType": "contract IRemoval",
                    "name": "removal",
                    "type": "address"
                },
                {
                    "internalType": "contract IMarket",
                    "name": "market",
                    "type": "address"
                }
            ],
            "name": "registerContractAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "revocableQuantityForSchedule",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "removalId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "toAccount",
                    "type": "address"
                }
            ],
            "name": "revokeUnreleasedTokens",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256[]",
                    "name": "",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "",
                    "type": "uint256[]"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "safeBatchTransferFrom",
            "outputs": [],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                }
            ],
            "name": "safeTransferFrom",
            "outputs": [],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                }
            ],
            "name": "scheduleExists",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "approved",
                    "type": "bool"
                }
            ],
            "name": "setApprovalForAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "methodology",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "methodologyVersion",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "durationInSeconds",
                    "type": "uint256"
                }
            ],
            "name": "setRestrictionDurationForMethodologyAndVersion",
            "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": [
                {
                    "internalType": "uint256",
                    "name": "id",
                    "type": "uint256"
                }
            ],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "unpause",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "uri",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "scheduleId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "withdrawFromSchedule",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d3565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000176565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620000ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e49190620001b6565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200015e602783620000ef565b91506200016b8262000100565b604082019050919050565b6000602082019050818103600083015262000191816200014f565b9050919050565b600060ff82169050919050565b620001b08162000198565b82525050565b6000602082019050620001cd6000830184620001a5565b92915050565b61736f80620001e36000396000f3fe608060405234801561001057600080fd5b50600436106102195760003560e01c8062fdd58e1461021e57806301ffc9a71461024e5780630e89341c1461027e5780631b2ef1ca146102ae578063229afd61146102ca578063248a9ca3146102e857806327ca0c27146103185780632d9f0f16146103485780632e5e8d83146103785780632eb2c2d6146103a85780632f2ff15d146103c457806336568abe146103e05780633f4ba83a146103fc578063440f5fd21461040657806346dbd535146104245780634e1273f4146104405780634f558e791461047057806355135b67146104a05780635c975abb146104bc5780635d37165a146104da5780636235a4e91461050a578063633433461461053a578063639aa0ad146105585780636a00f9eb14610588578063713279b1146105b85780638129fc1c146105e85780638456cb59146105f25780639010d07c146105fc57806391d148541461062c5780639ac7b44d1461065c578063a217fddf1461068c578063a22cb465146106aa578063a4b186f8146106c6578063ac9650d8146106f6578063b886fa7314610726578063b8b4dbe014610756578063bd85b03914610774578063c1499fa8146107a4578063c309f8e1146107c0578063ca15c873146107dc578063d53913931461080c578063d547741f1461082a578063e63ab1e914610846578063e6e0a03814610864578063e985e9c514610880578063f242432a146108b0575b600080fd5b61023860048036038101906102339190614819565b6108cc565b6040516102459190614868565b60405180910390f35b610268600480360381019061026391906148db565b610995565b6040516102759190614923565b60405180910390f35b6102986004803603810190610293919061493e565b6109a7565b6040516102a591906149fb565b60405180910390f35b6102c860048036038101906102c39190614a1d565b610a3b565b005b6102d2610bad565b6040516102df9190614a76565b60405180910390f35b61030260048036038101906102fd9190614abd565b610bd1565b60405161030f9190614a76565b60405180910390f35b610332600480360381019061032d9190614aea565b610bf1565b60405161033f9190614923565b60405180910390f35b610362600480360381019061035d9190614ba2565b610db2565b60405161036f9190614e2e565b60405180910390f35b610392600480360381019061038d919061493e565b610e73565b60405161039f9190614f00565b60405180910390f35b6103c260048036038101906103bd9190615115565b61104e565b005b6103de60048036038101906103d991906151e4565b611080565b005b6103fa60048036038101906103f591906151e4565b6110a1565b005b610404611124565b005b61040e611159565b60405161041b9190615233565b60405180910390f35b61043e6004803603810190610439919061524e565b611184565b005b61045a60048036038101906104559190615364565b6116fa565b604051610467919061548b565b60405180910390f35b61048a6004803603810190610485919061493e565b611813565b6040516104979190614923565b60405180910390f35b6104ba60048036038101906104b591906154e6565b611827565b005b6104c4611946565b6040516104d19190614923565b60405180910390f35b6104f460048036038101906104ef919061554d565b61195d565b6040516105019190614868565b60405180910390f35b610524600480360381019061051f919061493e565b6119a7565b6040516105319190614868565b60405180910390f35b6105426119e5565b60405161054f919061548b565b60405180910390f35b610572600480360381019061056d9190614819565b611a91565b60405161057f9190615608565b60405180910390f35b6105a2600480360381019061059d9190615623565b611baf565b6040516105af91906157a9565b60405180910390f35b6105d260048036038101906105cd919061493e565b611d1c565b6040516105df9190614868565b60405180910390f35b6105f0611d5a565b005b6105fa611fa1565b005b610616600480360381019061061191906157cb565b611fd6565b6040516106239190615233565b60405180910390f35b610646600480360381019061064191906151e4565b612006565b6040516106539190614923565b60405180910390f35b61067660048036038101906106719190614a1d565b612071565b6040516106839190614868565b60405180910390f35b6106946120a1565b6040516106a19190614a76565b60405180910390f35b6106c460048036038101906106bf9190615837565b6120a8565b005b6106e060048036038101906106db919061493e565b6120be565b6040516106ed9190614923565b60405180910390f35b610710600480360381019061070b91906158cd565b6120e3565b60405161071d9190615a31565b60405180910390f35b610740600480360381019061073b9190615a53565b6121ef565b60405161074d9190614868565b60405180910390f35b61075e612239565b60405161076b9190614a76565b60405180910390f35b61078e6004803603810190610789919061493e565b61225d565b60405161079b9190614868565b60405180910390f35b6107be60048036038101906107b99190615a80565b61227a565b005b6107da60048036038101906107d59190614819565b6122f9565b005b6107f660048036038101906107f19190614abd565b6123e3565b6040516108039190614868565b60405180910390f35b610814612408565b6040516108219190614a76565b60405180910390f35b610844600480360381019061083f91906151e4565b61242c565b005b61084e61244d565b60405161085b9190614a76565b60405180910390f35b61087e60048036038101906108799190615b8d565b612471565b005b61089a60048036038101906108959190615be0565b612552565b6040516108a79190614923565b60405180910390f35b6108ca60048036038101906108c59190615c20565b6125e6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390615d29565b60405180910390fd5b6097600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006109a082612618565b9050919050565b6060609980546109b690615d78565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290615d78565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b50505050509050919050565b610a6c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610a67612692565b612006565b610ab457610a78612692565b6040517ff78d2300000000000000000000000000000000000000000000000000000000008152600401610aab9190615233565b60405180910390fd5b600061019760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d932dfb836040518263ffffffff1660e01b8152600401610b129190614868565b602060405180830381865afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b539190615dbe565b90506000610b608361269a565b9050610b7d818386604051806020016040528060008152506126b0565b610ba681610193600085815260200190815260200160002060050161286190919063ffffffff16565b5050505050565b7fb62aeb2ef35a3718e51a7e8b0b0d8e6fa690a4037bf45dad308976da469a861c81565b600060fb6000838152602001908152602001600020600101549050919050565b6000610c05610bfe612692565b8484612891565b60006101936000858152602001908152602001600020905082816002016000828254610c319190615e1a565b9250508190555082816007016000610c47612692565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c909190615e1a565b92505081905550838573ffffffffffffffffffffffffffffffffffffffff16610cb7612692565b73ffffffffffffffffffffffffffffffffffffffff167f8ac34c3804c4564545d611b14933b1585e198f9a8ce80f3d817a733ca7f87d3786604051610cfc9190614868565b60405180910390a461019660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856040518363ffffffff1660e01b8152600401610d62929190615e4e565b6020604051808303816000875af1158015610d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da59190615e8c565b5060019150509392505050565b606060008383905067ffffffffffffffff811115610dd357610dd2614f22565b5b604051908082528060200260200182016040528015610e0c57816020015b610df96146e0565b815260200190600190039081610df15790505b50905060005b84849050811015610e6857610e3f858583818110610e3357610e32615eb9565b5b90506020020135610e73565b828281518110610e5257610e51615eb9565b5b6020026020010181905250806001019050610e12565b508091505092915050565b610e7b6146e0565b6000610193600084815260200190815260200160002090506000610ea182600501612ad9565b905060008167ffffffffffffffff811115610ebf57610ebe614f22565b5b604051908082528060200260200182016040528015610eed5781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115610f0c57610f0b614f22565b5b604051908082528060200260200182016040528015610f3a5781602001602082028036833780820191505090505b50905060005b83811015610fd657610f5e8186600501612aee90919063ffffffff16565b838281518110610f7157610f70615eb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505086828281518110610fbf57610fbe615eb9565b5b602002602001018181525050806001019050610f40565b506000610fe28761225d565b90506040518061010001604052808881526020018660000154815260200186600101548152602001828152602001611025898489612b089092919063ffffffff16565b815260200186600201548152602001866003015481526020018481525095505050505050919050565b6040517fbf24148800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108982610bd1565b61109281612b7f565b61109c8383612b93565b505050565b6110a9612692565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90615f5a565b60405180910390fd5b6111208282612ba9565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61114e81612b7f565b611156612bbf565b50565b600061019660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f813b9efdf6afe6b57682eb1fb850711edc34da21ae7f7376cb7a391b1be3239f6111ae81612b7f565b600061019760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d932dfb866040518263ffffffff1660e01b815260040161120c9190614868565b602060405180830381865afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d9190615dbe565b905060006101936000838152602001908152602001600020905061127081612c22565b6112b157816040517f25f878170000000000000000000000000000000000000000000000000000000081526004016112a89190614868565b60405180910390fd5b60006112d0836112c08561225d565b84612c339092919063ffffffff16565b90508086111561131757826040517f610d283800000000000000000000000000000000000000000000000000000000815260040161130e9190614868565b60405180910390fd5b60008087116113265781611328565b865b9050600061133884600501612cb8565b90506000815167ffffffffffffffff81111561135757611356614f22565b5b6040519080825280602002602001820160405280156113855781602001602082028036833780820191505090505b50905060005b82518110156113e2576113b88382815181106113aa576113a9615eb9565b5b6020026020010151886108cc565b8282815181106113cb576113ca615eb9565b5b60200260200101818152505080600101905061138b565b506000825167ffffffffffffffff811115611400576113ff614f22565b5b60405190808252806020026020018201604052801561142e5781602001602082028036833780820191505090505b5090506000805b600185516114439190615f7a565b8110156114cf57600061148d878b8b89868151811061146557611464615eb9565b5b60200260200101518987815181106114805761147f615eb9565b5b6020026020010151612cd9565b9050808483815181106114a3576114a2615eb9565b5b60200260200101818152505080836114bb9190615e1a565b925050806114c890615fae565b9050611435565b5080856114dc9190615f7a565b82600186516114eb9190615f7a565b815181106114fc576114fb615eb9565b5b60200260200101818152505060005b84518110156115f05761155385828151811061152a57611529615eb9565b5b60200260200101518a85848151811061154657611545615eb9565b5b6020026020010151612891565b82818151811061156657611565615eb9565b5b602002602001015188600801600087848151811061158757611586615eb9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115d89190615e1a565b92505081905550806115e990615fae565b905061150b565b50848760030160008282546116059190615e1a565b925050819055508b88427f4d641c2ca9261584e3de048c803a63d133b28387ab704ace681fd7b220094b5288888760405161164293929190616065565b60405180910390a461019660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8b876040518363ffffffff1660e01b81526004016116a8929190615e4e565b6020604051808303816000875af11580156116c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116eb9190615e8c565b50505050505050505050505050565b60608151835114611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117379061611c565b60405180910390fd5b6000835167ffffffffffffffff81111561175d5761175c614f22565b5b60405190808252806020026020018201604052801561178b5781602001602082028036833780820191505090505b50905060005b8451811015611808576117d88582815181106117b0576117af615eb9565b5b60200260200101518583815181106117cb576117ca615eb9565b5b60200260200101516108cc565b8282815181106117eb576117ea615eb9565b5b6020026020010181815250508061180190615fae565b9050611791565b508091505092915050565b60008061181f8361225d565b119050919050565b61182f612d91565b7fb62aeb2ef35a3718e51a7e8b0b0d8e6fa690a4037bf45dad308976da469a861c61185981612b7f565b3073ffffffffffffffffffffffffffffffffffffffff1663a4b186f8866040518263ffffffff1660e01b81526004016118929190614868565b602060405180830381865afa1580156118af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d39190615e8c565b1561191557846040517fde20885c00000000000000000000000000000000000000000000000000000000815260040161190c9190614868565b60405180910390fd5b60006119278460ff168460ff16612071565b90506119338582612ddb565b61193e868683612e65565b505050505050565b6000603360009054906101000a900460ff16905090565b6000806101936000858152602001908152602001600020905061199e836119838661225d565b61198d86886108cc565b84612ef4909392919063ffffffff16565b91505092915050565b600080610193600084815260200190815260200160002090506119dd836119cd8561225d565b83612b089092919063ffffffff16565b915050919050565b606060006119f4610194612fd2565b67ffffffffffffffff811115611a0d57611a0c614f22565b5b604051908082528060200260200182016040528015611a3b5781602001602082028036833780820191505090505b50905060005b8151811015611a8957611a5f81610194612fe790919063ffffffff16565b828281518110611a7257611a71615eb9565b5b602002602001018181525050806001019050611a41565b508091505090565b611a99614725565b6000610193600084815260200190815260200160002090506040518060c001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001611ae886866108cc565b8152602001611b1586611afa8761225d565b611b0489896108cc565b86612ef4909392919063ffffffff16565b81526020018260070160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018260080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525091505092915050565b60606000825167ffffffffffffffff811115611bce57611bcd614f22565b5b604051908082528060200260200182016040528015611c0757816020015b611bf4614725565b815260200190600190039081611bec5790505b50905060005b8351811015611d1157611c4c6101936000868481518110611c3157611c30615eb9565b5b60200260200101518152602001908152602001600020612c22565b15611d06573073ffffffffffffffffffffffffffffffffffffffff1663639aa0ad86868481518110611c8157611c80615eb9565b5b60200260200101516040518363ffffffff1660e01b8152600401611ca6929190615e4e565b60c060405180830381865afa158015611cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce791906161f6565b828281518110611cfa57611cf9615eb9565b5b60200260200101819052505b806001019050611c0d565b508091505092915050565b60008061019360008481526020019081526020016000209050611d5283611d428561225d565b83612c339092919063ffffffff16565b915050919050565b60008060019054906101000a900460ff16159050808015611d8b5750600160008054906101000a900460ff1660ff16105b80611db85750611d9a30613001565b158015611db75750600160008054906101000a900460ff1660ff16145b5b611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90616295565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611e34576001600060016101000a81548160ff0219169083151502179055505b611e556040518060600160405280603281526020016172e160329139613024565b611e5d61307f565b611e656130d0565b611e6d613121565b611e75613172565b611e7d6131c3565b611e8561322f565b611e8d613280565b611ea16000801b611e9c612692565b612b93565b611ed27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611ecd612692565b612b93565b611f037fb62aeb2ef35a3718e51a7e8b0b0d8e6fa690a4037bf45dad308976da469a861c611efe612692565b612b93565b611f347f813b9efdf6afe6b57682eb1fb850711edc34da21ae7f7376cb7a391b1be3239f611f2f612692565b612b93565b611f45600160006312cf357061227a565b8015611f9e5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611f9591906162fa565b60405180910390a15b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611fcb81612b7f565b611fd36132d1565b50565b6000611ffe8261012d6000868152602001908152602001600020612aee90919063ffffffff16565b905092915050565b600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006101926000848152602001908152602001600020600083815260200190815260200160002054905092915050565b6000801b81565b6120ba6120b3612692565b8383613334565b5050565b60006120dc6101936000848152602001908152602001600020612c22565b9050919050565b60608282905067ffffffffffffffff81111561210257612101614f22565b5b60405190808252806020026020018201604052801561213557816020015b60608152602001906001900390816121205790505b50905060005b838390508110156121e8576121b73085858481811061215d5761215c615eb9565b5b905060200281019061216f9190616324565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134a0565b8282815181106121ca576121c9615eb9565b5b602002602001018190525080806121e090615fae565b91505061213b565b5092915050565b600061019160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f813b9efdf6afe6b57682eb1fb850711edc34da21ae7f7376cb7a391b1be3239f81565b600060c96000838152602001908152602001600020549050919050565b612282612d91565b6000801b61228f81612b7f565b600082036122c9576040517f98eb412400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81610192600086815260200190815260200160002060008581526020019081526020016000208190555050505050565b61019860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661233b612692565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f9cd0349200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061019160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123d89190615e1a565b925050819055505050565b600061240161012d6000848152602001908152602001600020612ad9565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61243582610bd1565b61243e81612b7f565b6124488383612ba9565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b612479612d91565b6000801b61248681612b7f565b8361019660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508261019760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161019860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000609860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6040517fbf24148800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061268b575061268a82613584565b5b9050919050565b600033905090565b60006126a982601460046135fe565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612716906163f9565b60405180910390fd5b6000612729612692565b9050600061273685613662565b9050600061274385613662565b9050612754836000898585896136dc565b846097600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127b49190615e1a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612832929190616419565b60405180910390a461284983600089858589613875565b6128588360008989898961387d565b50505050505050565b6000612889836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613a54565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f7906164b4565b60405180910390fd5b600061290a612692565b9050600061291784613662565b9050600061292484613662565b9050612944838760008585604051806020016040528060008152506136dc565b60006097600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d390616546565b60405180910390fd5b8481036097600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612aaa929190616419565b60405180910390a4612ad084886000868660405180602001604052806000815250613875565b50505050505050565b6000612ae782600001613ac4565b9050919050565b6000612afd8360000183613ad5565b60001c905092915050565b6000612b1384612c22565b612b5457826040517f25f87817000000000000000000000000000000000000000000000000000000008152600401612b4b9190614868565b60405180910390fd5b8360020154612b6c8386613b0090919063ffffffff16565b612b769190615f7a565b90509392505050565b612b9081612b8b612692565b613b2a565b50565b612b9b612d91565b612ba58282613baf565b5050565b612bb1612d91565b612bbb8282613be4565b5050565b612bc7613c19565b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612c0b612692565b604051612c189190615233565b60405180910390a1565b600080826001015414159050919050565b6000612c3e84612c22565b612c7f57826040517f25f87817000000000000000000000000000000000000000000000000000000008152600401612c769190614868565b60405180910390fd5b612c928285613b0090919063ffffffff16565b612ca58386613c6290919063ffffffff16565b612caf9190615f7a565b90509392505050565b60606000612cc883600001613c7c565b905060608190508092505050919050565b600080612cf7612ce88761225d565b86613c6290919063ffffffff16565b9050600080821480612d095750600088145b15612d175760009050612d83565b60008660070160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082898683612d6b9190615e1a565b612d759190616566565b612d7f91906165d7565b9150505b809250505095945050505050565b612d99611946565b15612dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd090616654565b60405180910390fd5b565b60008203612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e15906166c0565b60405180910390fd5b60008103612e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e589061672c565b60405180910390fd5b5050565b6000610193600085815260200190815260200160002090508281600001819055508183612e929190615e1a565b8160010181905550612eaf84610194613cd890919063ffffffff16565b50837fc6bf85d136b95579125a47c9781847cacd55015777db8a853dd17946aed35fb2848360010154604051612ee6929190616419565b60405180910390a250505050565b600080612f0a8487613c6290919063ffffffff16565b9050600080821480612f1c5750600084145b15612f2a5760009050612fc5565b60008760070160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000612f85878a613b0090919063ffffffff16565b905060008287612f959190615e1a565b90506000858284612fa69190616566565b612fb091906165d7565b90508381612fbe9190615f7a565b9450505050505b8092505050949350505050565b6000612fe082600001613ac4565b9050919050565b6000612ff68360000183613ad5565b60001c905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a906167be565b60405180910390fd5b61307c81613cf2565b50565b600060019054906101000a900460ff166130ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c5906167be565b60405180910390fd5b565b600060019054906101000a900460ff1661311f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613116906167be565b60405180910390fd5b565b600060019054906101000a900460ff16613170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613167906167be565b60405180910390fd5b565b600060019054906101000a900460ff166131c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b8906167be565b60405180910390fd5b565b600060019054906101000a900460ff16613212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613209906167be565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff1661327e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613275906167be565b60405180910390fd5b565b600060019054906101000a900460ff166132cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c6906167be565b60405180910390fd5b565b6132d9612d91565b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861331d612692565b60405161332a9190615233565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339990616850565b60405180910390fd5b80609860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134939190614923565b60405180910390a3505050565b60606134ab83613001565b6134ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e1906168e2565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051613512919061693e565b600060405180830381855af49150503d806000811461354d576040519150601f19603f3d011682016040523d82523d6000602084013e613552565b606091505b509150915061357a828260405180606001604052806027815260200161731360279139613d05565b9250505092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806135f757506135f682613d27565b5b9050919050565b60008060088361360e9190616566565b600160088661361d9190616566565b60026136299190616a88565b6136339190615f7a565b60001b901b90506000818660001b1690506008846136519190616566565b81901c60001c925050509392505050565b60606000600167ffffffffffffffff81111561368157613680614f22565b5b6040519080825280602002602001820160405280156136af5781602001602082028036833780820191505090505b50905082816000815181106136c7576136c6615eb9565b5b60200260200101818152505080915050919050565b6136e4612d91565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16149050600081801561375157508773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b9050811561385d5760005b855181101561385b57600086828151811061377a57613779615eb9565b5b60200260200101519050600061019360008381526020019081526020016000209050831561382b576137ca8a6137af8461225d565b6137b98d866108cc565b84612ef4909392919063ffffffff16565b8784815181106137dd576137dc615eb9565b5b6020026020010151111561382a5789826040517fe1b8b25f000000000000000000000000000000000000000000000000000000008152600401613821929190615e4e565b60405180910390fd5b5b6138466138378361225d565b82613b0090919063ffffffff16565b8160040181905550505080600101905061375c565b505b61386b888888888888613e09565b5050505050505050565b505050505050565b61389c8473ffffffffffffffffffffffffffffffffffffffff16613001565b15613a4c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016138e2959493929190616b1d565b6020604051808303816000875af192505050801561391e57506040513d601f19601f8201168201806040525081019061391b9190616b8c565b60015b6139c35761392a616bc6565b806308c379a003613986575061393e616be8565b806139495750613988565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397d91906149fb565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ba90616cea565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4190616d7c565b60405180910390fd5b505b505050505050565b6000613a608383613fd9565b613ab9578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613abe565b600090505b92915050565b600081600001805490509050919050565b6000826000018281548110613aed57613aec615eb9565b5b9060005260206000200154905092915050565b6000613b22613b188385613ffc90919063ffffffff16565b8460040154614095565b905092915050565b613b348282612006565b613bab57613b41816140ae565b613b4f8360001c60206140db565b604051602001613b60929190616e70565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba291906149fb565b60405180910390fd5b5050565b613bb98282614317565b613bdf8161012d600085815260200190815260200160002061286190919063ffffffff16565b505050565b613bee82826143f8565b613c148161012d60008581526020019081526020016000206144da90919063ffffffff16565b505050565b613c21611946565b613c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5790616ef6565b60405180910390fd5b565b6000818360020154613c749190615e1a565b905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613ccc57602002820191906000526020600020905b815481526020019060010190808311613cb8575b50505050509050919050565b6000613cea836000018360001b613a54565b905092915050565b8060999081613d0191906170b8565b5050565b60608315613d1557829050613d20565b613d1f838361450a565b5b9392505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613df257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613e025750613e018261455a565b5b9050919050565b613e178686868686866145c4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613ec85760005b8351811015613ec657828181518110613e6a57613e69615eb9565b5b602002602001015160c96000868481518110613e8957613e88615eb9565b5b602002602001015181526020019081526020016000206000828254613eae9190615e1a565b9250508190555080613ebf90615fae565b9050613e4e565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613fd15760005b8351811015613fcf576000848281518110613f1d57613f1c615eb9565b5b602002602001015190506000848381518110613f3c57613f3b615eb9565b5b60200260200101519050600060c9600084815260200190815260200160002054905081811015613fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f98906171fc565b60405180910390fd5b81810360c960008581526020019081526020016000208190555050505080613fc890615fae565b9050613eff565b505b505050505050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001015442106140245761401d8385613c6290919063ffffffff16565b905061408b565b60008460000154856001015461403a9190615f7a565b90508460000154421061408457808560000154426140589190615f7a565b61406b8688613c6290919063ffffffff16565b6140759190616566565b61407f91906165d7565b614087565b60005b9150505b8091505092915050565b60008183116140a457816140a6565b825b905092915050565b60606140d48273ffffffffffffffffffffffffffffffffffffffff16601460ff166140db565b9050919050565b6060600060028360026140ee9190616566565b6140f89190615e1a565b67ffffffffffffffff81111561411157614110614f22565b5b6040519080825280601f01601f1916602001820160405280156141435781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061417b5761417a615eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106141df576141de615eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261421f9190616566565b6142299190615e1a565b90505b60018111156142c9577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061426b5761426a615eb9565b5b1a60f81b82828151811061428257614281615eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806142c29061721c565b905061422c565b506000841461430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430490617291565b60405180910390fd5b8091505092915050565b6143218282612006565b6143f457600160fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614399612692565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6144028282612006565b156144d657600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061447b612692565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000614502836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6145cc565b905092915050565b60008251111561451d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161455191906149fb565b60405180910390fd5b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b600080836001016000848152602001908152602001600020549050600081146146d45760006001826145fe9190615f7a565b90506000600186600001805490506146169190615f7a565b905081811461468557600086600001828154811061463757614636615eb9565b5b906000526020600020015490508087600001848154811061465b5761465a615eb9565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480614699576146986172b1565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506146da565b60009150505b92915050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147b082614785565b9050919050565b6147c0816147a5565b81146147cb57600080fd5b50565b6000813590506147dd816147b7565b92915050565b6000819050919050565b6147f6816147e3565b811461480157600080fd5b50565b600081359050614813816147ed565b92915050565b600080604083850312156148305761482f61477b565b5b600061483e858286016147ce565b925050602061484f85828601614804565b9150509250929050565b614862816147e3565b82525050565b600060208201905061487d6000830184614859565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6148b881614883565b81146148c357600080fd5b50565b6000813590506148d5816148af565b92915050565b6000602082840312156148f1576148f061477b565b5b60006148ff848285016148c6565b91505092915050565b60008115159050919050565b61491d81614908565b82525050565b60006020820190506149386000830184614914565b92915050565b6000602082840312156149545761495361477b565b5b600061496284828501614804565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149a557808201518184015260208101905061498a565b60008484015250505050565b6000601f19601f8301169050919050565b60006149cd8261496b565b6149d78185614976565b93506149e7818560208601614987565b6149f0816149b1565b840191505092915050565b60006020820190508181036000830152614a1581846149c2565b905092915050565b60008060408385031215614a3457614a3361477b565b5b6000614a4285828601614804565b9250506020614a5385828601614804565b9150509250929050565b6000819050919050565b614a7081614a5d565b82525050565b6000602082019050614a8b6000830184614a67565b92915050565b614a9a81614a5d565b8114614aa557600080fd5b50565b600081359050614ab781614a91565b92915050565b600060208284031215614ad357614ad261477b565b5b6000614ae184828501614aa8565b91505092915050565b600080600060608486031215614b0357614b0261477b565b5b6000614b11868287016147ce565b9350506020614b2286828701614804565b9250506040614b3386828701614804565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112614b6257614b61614b3d565b5b8235905067ffffffffffffffff811115614b7f57614b7e614b42565b5b602083019150836020820283011115614b9b57614b9a614b47565b5b9250929050565b60008060208385031215614bb957614bb861477b565b5b600083013567ffffffffffffffff811115614bd757614bd6614780565b5b614be385828601614b4c565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c24816147e3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c5f816147a5565b82525050565b6000614c718383614c56565b60208301905092915050565b6000602082019050919050565b6000614c9582614c2a565b614c9f8185614c35565b9350614caa83614c46565b8060005b83811015614cdb578151614cc28882614c65565b9750614ccd83614c7d565b925050600181019050614cae565b5085935050505092915050565b600061010083016000830151614d016000860182614c1b565b506020830151614d146020860182614c1b565b506040830151614d276040860182614c1b565b506060830151614d3a6060860182614c1b565b506080830151614d4d6080860182614c1b565b5060a0830151614d6060a0860182614c1b565b5060c0830151614d7360c0860182614c1b565b5060e083015184820360e0860152614d8b8282614c8a565b9150508091505092915050565b6000614da48383614ce8565b905092915050565b6000602082019050919050565b6000614dc482614bef565b614dce8185614bfa565b935083602082028501614de085614c0b565b8060005b85811015614e1c5784840389528151614dfd8582614d98565b9450614e0883614dac565b925060208a01995050600181019050614de4565b50829750879550505050505092915050565b60006020820190508181036000830152614e488184614db9565b905092915050565b600061010083016000830151614e696000860182614c1b565b506020830151614e7c6020860182614c1b565b506040830151614e8f6040860182614c1b565b506060830151614ea26060860182614c1b565b506080830151614eb56080860182614c1b565b5060a0830151614ec860a0860182614c1b565b5060c0830151614edb60c0860182614c1b565b5060e083015184820360e0860152614ef38282614c8a565b9150508091505092915050565b60006020820190508181036000830152614f1a8184614e50565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614f5a826149b1565b810181811067ffffffffffffffff82111715614f7957614f78614f22565b5b80604052505050565b6000614f8c614771565b9050614f988282614f51565b919050565b600067ffffffffffffffff821115614fb857614fb7614f22565b5b602082029050602081019050919050565b6000614fdc614fd784614f9d565b614f82565b90508083825260208201905060208402830185811115614fff57614ffe614b47565b5b835b8181101561502857806150148882614804565b845260208401935050602081019050615001565b5050509392505050565b600082601f83011261504757615046614b3d565b5b8135615057848260208601614fc9565b91505092915050565b600080fd5b600067ffffffffffffffff8211156150805761507f614f22565b5b615089826149b1565b9050602081019050919050565b82818337600083830152505050565b60006150b86150b384615065565b614f82565b9050828152602081018484840111156150d4576150d3615060565b5b6150df848285615096565b509392505050565b600082601f8301126150fc576150fb614b3d565b5b813561510c8482602086016150a5565b91505092915050565b600080600080600060a086880312156151315761513061477b565b5b600061513f888289016147ce565b9550506020615150888289016147ce565b945050604086013567ffffffffffffffff81111561517157615170614780565b5b61517d88828901615032565b935050606086013567ffffffffffffffff81111561519e5761519d614780565b5b6151aa88828901615032565b925050608086013567ffffffffffffffff8111156151cb576151ca614780565b5b6151d7888289016150e7565b9150509295509295909350565b600080604083850312156151fb576151fa61477b565b5b600061520985828601614aa8565b925050602061521a858286016147ce565b9150509250929050565b61522d816147a5565b82525050565b60006020820190506152486000830184615224565b92915050565b6000806000606084860312156152675761526661477b565b5b600061527586828701614804565b935050602061528686828701614804565b9250506040615297868287016147ce565b9150509250925092565b600067ffffffffffffffff8211156152bc576152bb614f22565b5b602082029050602081019050919050565b60006152e06152db846152a1565b614f82565b9050808382526020820190506020840283018581111561530357615302614b47565b5b835b8181101561532c578061531888826147ce565b845260208401935050602081019050615305565b5050509392505050565b600082601f83011261534b5761534a614b3d565b5b813561535b8482602086016152cd565b91505092915050565b6000806040838503121561537b5761537a61477b565b5b600083013567ffffffffffffffff81111561539957615398614780565b5b6153a585828601615336565b925050602083013567ffffffffffffffff8111156153c6576153c5614780565b5b6153d285828601615032565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006154148383614c1b565b60208301905092915050565b6000602082019050919050565b6000615438826153dc565b61544281856153e7565b935061544d836153f8565b8060005b8381101561547e5781516154658882615408565b975061547083615420565b925050600181019050615451565b5085935050505092915050565b600060208201905081810360008301526154a5818461542d565b905092915050565b600060ff82169050919050565b6154c3816154ad565b81146154ce57600080fd5b50565b6000813590506154e0816154ba565b92915050565b60008060008060808587031215615500576154ff61477b565b5b600061550e87828801614804565b945050602061551f87828801614804565b9350506040615530878288016154d1565b9250506060615541878288016154d1565b91505092959194509250565b600080604083850312156155645761556361477b565b5b600061557285828601614804565b9250506020615583858286016147ce565b9150509250929050565b60c0820160008201516155a36000850182614c56565b5060208201516155b66020850182614c1b565b5060408201516155c96040850182614c1b565b5060608201516155dc6060850182614c1b565b5060808201516155ef6080850182614c1b565b5060a082015161560260a0850182614c1b565b50505050565b600060c08201905061561d600083018461558d565b92915050565b6000806040838503121561563a5761563961477b565b5b6000615648858286016147ce565b925050602083013567ffffffffffffffff81111561566957615668614780565b5b61567585828601615032565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c0820160008201516156c16000850182614c56565b5060208201516156d46020850182614c1b565b5060408201516156e76040850182614c1b565b5060608201516156fa6060850182614c1b565b50608082015161570d6080850182614c1b565b5060a082015161572060a0850182614c1b565b50505050565b600061573283836156ab565b60c08301905092915050565b6000602082019050919050565b60006157568261567f565b615760818561568a565b935061576b8361569b565b8060005b8381101561579c5781516157838882615726565b975061578e8361573e565b92505060018101905061576f565b5085935050505092915050565b600060208201905081810360008301526157c3818461574b565b905092915050565b600080604083850312156157e2576157e161477b565b5b60006157f085828601614aa8565b925050602061580185828601614804565b9150509250929050565b61581481614908565b811461581f57600080fd5b50565b6000813590506158318161580b565b92915050565b6000806040838503121561584e5761584d61477b565b5b600061585c858286016147ce565b925050602061586d85828601615822565b9150509250929050565b60008083601f84011261588d5761588c614b3d565b5b8235905067ffffffffffffffff8111156158aa576158a9614b42565b5b6020830191508360208202830111156158c6576158c5614b47565b5b9250929050565b600080602083850312156158e4576158e361477b565b5b600083013567ffffffffffffffff81111561590257615901614780565b5b61590e85828601615877565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b600061596d82615946565b6159778185615951565b9350615987818560208601614987565b615990816149b1565b840191505092915050565b60006159a78383615962565b905092915050565b6000602082019050919050565b60006159c78261591a565b6159d18185615925565b9350836020820285016159e385615936565b8060005b85811015615a1f5784840389528151615a00858261599b565b9450615a0b836159af565b925060208a019950506001810190506159e7565b50829750879550505050505092915050565b60006020820190508181036000830152615a4b81846159bc565b905092915050565b600060208284031215615a6957615a6861477b565b5b6000615a77848285016147ce565b91505092915050565b600080600060608486031215615a9957615a9861477b565b5b6000615aa786828701614804565b9350506020615ab886828701614804565b9250506040615ac986828701614804565b9150509250925092565b6000615ade826147a5565b9050919050565b615aee81615ad3565b8114615af957600080fd5b50565b600081359050615b0b81615ae5565b92915050565b6000615b1c826147a5565b9050919050565b615b2c81615b11565b8114615b3757600080fd5b50565b600081359050615b4981615b23565b92915050565b6000615b5a826147a5565b9050919050565b615b6a81615b4f565b8114615b7557600080fd5b50565b600081359050615b8781615b61565b92915050565b600080600060608486031215615ba657615ba561477b565b5b6000615bb486828701615afc565b9350506020615bc586828701615b3a565b9250506040615bd686828701615b78565b9150509250925092565b60008060408385031215615bf757615bf661477b565b5b6000615c05858286016147ce565b9250506020615c16858286016147ce565b9150509250929050565b600080600080600060a08688031215615c3c57615c3b61477b565b5b6000615c4a888289016147ce565b9550506020615c5b888289016147ce565b9450506040615c6c88828901614804565b9350506060615c7d88828901614804565b925050608086013567ffffffffffffffff811115615c9e57615c9d614780565b5b615caa888289016150e7565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000615d13602a83614976565b9150615d1e82615cb7565b604082019050919050565b60006020820190508181036000830152615d4281615d06565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680615d9057607f821691505b602082108103615da357615da2615d49565b5b50919050565b600081519050615db8816147ed565b92915050565b600060208284031215615dd457615dd361477b565b5b6000615de284828501615da9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615e25826147e3565b9150615e30836147e3565b9250828201905080821115615e4857615e47615deb565b5b92915050565b6000604082019050615e636000830185615224565b615e706020830184614859565b9392505050565b600081519050615e868161580b565b92915050565b600060208284031215615ea257615ea161477b565b5b6000615eb084828501615e77565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000615f44602f83614976565b9150615f4f82615ee8565b604082019050919050565b60006020820190508181036000830152615f7381615f37565b9050919050565b6000615f85826147e3565b9150615f90836147e3565b9250828203905081811115615fa857615fa7615deb565b5b92915050565b6000615fb9826147e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615feb57615fea615deb565b5b600182019050919050565b600082825260208201905092915050565b600061601282614c2a565b61601c8185615ff6565b935061602783614c46565b8060005b8381101561605857815161603f8882614c65565b975061604a83614c7d565b92505060018101905061602b565b5085935050505092915050565b600060608201905061607a6000830186614859565b818103602083015261608c8185616007565b905081810360408301526160a0818461542d565b9050949350505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000616106602983614976565b9150616111826160aa565b604082019050919050565b60006020820190508181036000830152616135816160f9565b9050919050565b600080fd5b600081519050616150816147b7565b92915050565b600060c0828403121561616c5761616b61613c565b5b61617660c0614f82565b9050600061618684828501616141565b600083015250602061619a84828501615da9565b60208301525060406161ae84828501615da9565b60408301525060606161c284828501615da9565b60608301525060806161d684828501615da9565b60808301525060a06161ea84828501615da9565b60a08301525092915050565b600060c0828403121561620c5761620b61477b565b5b600061621a84828501616156565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061627f602e83614976565b915061628a82616223565b604082019050919050565b600060208201905081810360008301526162ae81616272565b9050919050565b6000819050919050565b6000819050919050565b60006162e46162df6162da846162b5565b6162bf565b6154ad565b9050919050565b6162f4816162c9565b82525050565b600060208201905061630f60008301846162eb565b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261634157616340616315565b5b80840192508235915067ffffffffffffffff8211156163635761636261631a565b5b60208301925060018202360383131561637f5761637e61631f565b5b509250929050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006163e3602183614976565b91506163ee82616387565b604082019050919050565b60006020820190508181036000830152616412816163d6565b9050919050565b600060408201905061642e6000830185614859565b61643b6020830184614859565b9392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061649e602383614976565b91506164a982616442565b604082019050919050565b600060208201905081810360008301526164cd81616491565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000616530602483614976565b915061653b826164d4565b604082019050919050565b6000602082019050818103600083015261655f81616523565b9050919050565b6000616571826147e3565b915061657c836147e3565b925082820261658a816147e3565b915082820484148315176165a1576165a0615deb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006165e2826147e3565b91506165ed836147e3565b9250826165fd576165fc6165a8565b5b828204905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061663e601083614976565b915061664982616608565b602082019050919050565b6000602082019050818103600083015261666d81616631565b9050919050565b7f724e4f52493a20496e76616c69642073746172742074696d6500000000000000600082015250565b60006166aa601983614976565b91506166b582616674565b602082019050919050565b600060208201905081810360008301526166d98161669d565b9050919050565b7f724e4f52493a206475726174696f6e206e6f7420736574000000000000000000600082015250565b6000616716601783614976565b9150616721826166e0565b602082019050919050565b6000602082019050818103600083015261674581616709565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006167a8602b83614976565b91506167b38261674c565b604082019050919050565b600060208201905081810360008301526167d78161679b565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061683a602983614976565b9150616845826167de565b604082019050919050565b600060208201905081810360008301526168698161682d565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006168cc602683614976565b91506168d782616870565b604082019050919050565b600060208201905081810360008301526168fb816168bf565b9050919050565b600081905092915050565b600061691882615946565b6169228185616902565b9350616932818560208601614987565b80840191505092915050565b600061694a828461690d565b915081905092915050565b60008160011c9050919050565b6000808291508390505b60018511156169ac5780860481111561698857616987615deb565b5b60018516156169975780820291505b80810290506169a585616955565b945061696c565b94509492505050565b6000826169c55760019050616a81565b816169d35760009050616a81565b81600181146169e957600281146169f357616a22565b6001915050616a81565b60ff841115616a0557616a04615deb565b5b8360020a915084821115616a1c57616a1b615deb565b5b50616a81565b5060208310610133831016604e8410600b8410161715616a575782820a905083811115616a5257616a51615deb565b5b616a81565b616a648484846001616962565b92509050818404811115616a7b57616a7a615deb565b5b81810290505b9392505050565b6000616a93826147e3565b9150616a9e836147e3565b9250616acb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846169b5565b905092915050565b600082825260208201905092915050565b6000616aef82615946565b616af98185616ad3565b9350616b09818560208601614987565b616b12816149b1565b840191505092915050565b600060a082019050616b326000830188615224565b616b3f6020830187615224565b616b4c6040830186614859565b616b596060830185614859565b8181036080830152616b6b8184616ae4565b90509695505050505050565b600081519050616b86816148af565b92915050565b600060208284031215616ba257616ba161477b565b5b6000616bb084828501616b77565b91505092915050565b60008160e01c9050919050565b600060033d1115616be55760046000803e616be2600051616bb9565b90505b90565b600060443d10616c7557616bfa614771565b60043d036004823e80513d602482011167ffffffffffffffff82111715616c22575050616c75565b808201805167ffffffffffffffff811115616c405750505050616c75565b80602083010160043d038501811115616c5d575050505050616c75565b616c6c82602001850186614f51565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000616cd4603483614976565b9150616cdf82616c78565b604082019050919050565b60006020820190508181036000830152616d0381616cc7565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000616d66602883614976565b9150616d7182616d0a565b604082019050919050565b60006020820190508181036000830152616d9581616d59565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000616ddd601783616d9c565b9150616de882616da7565b601782019050919050565b6000616dfe8261496b565b616e088185616d9c565b9350616e18818560208601614987565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000616e5a601183616d9c565b9150616e6582616e24565b601182019050919050565b6000616e7b82616dd0565b9150616e878285616df3565b9150616e9282616e4d565b9150616e9e8284616df3565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000616ee0601483614976565b9150616eeb82616eaa565b602082019050919050565b60006020820190508181036000830152616f0f81616ed3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302616f787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82616f3b565b616f828683616f3b565b95508019841693508086168417925050509392505050565b6000616fb5616fb0616fab846147e3565b6162bf565b6147e3565b9050919050565b6000819050919050565b616fcf83616f9a565b616fe3616fdb82616fbc565b848454616f48565b825550505050565b600090565b616ff8616feb565b617003818484616fc6565b505050565b5b818110156170275761701c600082616ff0565b600181019050617009565b5050565b601f82111561706c5761703d81616f16565b61704684616f2b565b81016020851015617055578190505b61706961706185616f2b565b830182617008565b50505b505050565b600082821c905092915050565b600061708f60001984600802617071565b1980831691505092915050565b60006170a8838361707e565b9150826002028217905092915050565b6170c18261496b565b67ffffffffffffffff8111156170da576170d9614f22565b5b6170e48254615d78565b6170ef82828561702b565b600060209050601f8311600181146171225760008415617110578287015190505b61711a858261709c565b865550617182565b601f19841661713086616f16565b60005b8281101561715857848901518255600182019150602085019450602081019050617133565b868310156171755784890151617171601f89168261707e565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006171e6602883614976565b91506171f18261718a565b604082019050919050565b60006020820190508181036000830152617215816171d9565b9050919050565b6000617227826147e3565b91506000820361723a57617239615deb565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061727b602083614976565b915061728682617245565b602082019050919050565b600060208201905081810360008301526172aa8161726e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe68747470733a2f2f6e6f72692e636f6d2f6170692f7265737472696374696f6e7363686564756c652f7b69647d2e6a736f6e416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c8e6d521d1779451a84e1ad3f1ce7c6e4d44115591a8c18df155473e0b62f26d64736f6c63430008110033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102195760003560e01c8062fdd58e1461021e57806301ffc9a71461024e5780630e89341c1461027e5780631b2ef1ca146102ae578063229afd61146102ca578063248a9ca3146102e857806327ca0c27146103185780632d9f0f16146103485780632e5e8d83146103785780632eb2c2d6146103a85780632f2ff15d146103c457806336568abe146103e05780633f4ba83a146103fc578063440f5fd21461040657806346dbd535146104245780634e1273f4146104405780634f558e791461047057806355135b67146104a05780635c975abb146104bc5780635d37165a146104da5780636235a4e91461050a578063633433461461053a578063639aa0ad146105585780636a00f9eb14610588578063713279b1146105b85780638129fc1c146105e85780638456cb59146105f25780639010d07c146105fc57806391d148541461062c5780639ac7b44d1461065c578063a217fddf1461068c578063a22cb465146106aa578063a4b186f8146106c6578063ac9650d8146106f6578063b886fa7314610726578063b8b4dbe014610756578063bd85b03914610774578063c1499fa8146107a4578063c309f8e1146107c0578063ca15c873146107dc578063d53913931461080c578063d547741f1461082a578063e63ab1e914610846578063e6e0a03814610864578063e985e9c514610880578063f242432a146108b0575b600080fd5b61023860048036038101906102339190614819565b6108cc565b6040516102459190614868565b60405180910390f35b610268600480360381019061026391906148db565b610995565b6040516102759190614923565b60405180910390f35b6102986004803603810190610293919061493e565b6109a7565b6040516102a591906149fb565b60405180910390f35b6102c860048036038101906102c39190614a1d565b610a3b565b005b6102d2610bad565b6040516102df9190614a76565b60405180910390f35b61030260048036038101906102fd9190614abd565b610bd1565b60405161030f9190614a76565b60405180910390f35b610332600480360381019061032d9190614aea565b610bf1565b60405161033f9190614923565b60405180910390f35b610362600480360381019061035d9190614ba2565b610db2565b60405161036f9190614e2e565b60405180910390f35b610392600480360381019061038d919061493e565b610e73565b60405161039f9190614f00565b60405180910390f35b6103c260048036038101906103bd9190615115565b61104e565b005b6103de60048036038101906103d991906151e4565b611080565b005b6103fa60048036038101906103f591906151e4565b6110a1565b005b610404611124565b005b61040e611159565b60405161041b9190615233565b60405180910390f35b61043e6004803603810190610439919061524e565b611184565b005b61045a60048036038101906104559190615364565b6116fa565b604051610467919061548b565b60405180910390f35b61048a6004803603810190610485919061493e565b611813565b6040516104979190614923565b60405180910390f35b6104ba60048036038101906104b591906154e6565b611827565b005b6104c4611946565b6040516104d19190614923565b60405180910390f35b6104f460048036038101906104ef919061554d565b61195d565b6040516105019190614868565b60405180910390f35b610524600480360381019061051f919061493e565b6119a7565b6040516105319190614868565b60405180910390f35b6105426119e5565b60405161054f919061548b565b60405180910390f35b610572600480360381019061056d9190614819565b611a91565b60405161057f9190615608565b60405180910390f35b6105a2600480360381019061059d9190615623565b611baf565b6040516105af91906157a9565b60405180910390f35b6105d260048036038101906105cd919061493e565b611d1c565b6040516105df9190614868565b60405180910390f35b6105f0611d5a565b005b6105fa611fa1565b005b610616600480360381019061061191906157cb565b611fd6565b6040516106239190615233565b60405180910390f35b610646600480360381019061064191906151e4565b612006565b6040516106539190614923565b60405180910390f35b61067660048036038101906106719190614a1d565b612071565b6040516106839190614868565b60405180910390f35b6106946120a1565b6040516106a19190614a76565b60405180910390f35b6106c460048036038101906106bf9190615837565b6120a8565b005b6106e060048036038101906106db919061493e565b6120be565b6040516106ed9190614923565b60405180910390f35b610710600480360381019061070b91906158cd565b6120e3565b60405161071d9190615a31565b60405180910390f35b610740600480360381019061073b9190615a53565b6121ef565b60405161074d9190614868565b60405180910390f35b61075e612239565b60405161076b9190614a76565b60405180910390f35b61078e6004803603810190610789919061493e565b61225d565b60405161079b9190614868565b60405180910390f35b6107be60048036038101906107b99190615a80565b61227a565b005b6107da60048036038101906107d59190614819565b6122f9565b005b6107f660048036038101906107f19190614abd565b6123e3565b6040516108039190614868565b60405180910390f35b610814612408565b6040516108219190614a76565b60405180910390f35b610844600480360381019061083f91906151e4565b61242c565b005b61084e61244d565b60405161085b9190614a76565b60405180910390f35b61087e60048036038101906108799190615b8d565b612471565b005b61089a60048036038101906108959190615be0565b612552565b6040516108a79190614923565b60405180910390f35b6108ca60048036038101906108c59190615c20565b6125e6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361093c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093390615d29565b60405180910390fd5b6097600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006109a082612618565b9050919050565b6060609980546109b690615d78565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290615d78565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b50505050509050919050565b610a6c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610a67612692565b612006565b610ab457610a78612692565b6040517ff78d2300000000000000000000000000000000000000000000000000000000008152600401610aab9190615233565b60405180910390fd5b600061019760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d932dfb836040518263ffffffff1660e01b8152600401610b129190614868565b602060405180830381865afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b539190615dbe565b90506000610b608361269a565b9050610b7d818386604051806020016040528060008152506126b0565b610ba681610193600085815260200190815260200160002060050161286190919063ffffffff16565b5050505050565b7fb62aeb2ef35a3718e51a7e8b0b0d8e6fa690a4037bf45dad308976da469a861c81565b600060fb6000838152602001908152602001600020600101549050919050565b6000610c05610bfe612692565b8484612891565b60006101936000858152602001908152602001600020905082816002016000828254610c319190615e1a565b9250508190555082816007016000610c47612692565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c909190615e1a565b92505081905550838573ffffffffffffffffffffffffffffffffffffffff16610cb7612692565b73ffffffffffffffffffffffffffffffffffffffff167f8ac34c3804c4564545d611b14933b1585e198f9a8ce80f3d817a733ca7f87d3786604051610cfc9190614868565b60405180910390a461019660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856040518363ffffffff1660e01b8152600401610d62929190615e4e565b6020604051808303816000875af1158015610d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da59190615e8c565b5060019150509392505050565b606060008383905067ffffffffffffffff811115610dd357610dd2614f22565b5b604051908082528060200260200182016040528015610e0c57816020015b610df96146e0565b815260200190600190039081610df15790505b50905060005b84849050811015610e6857610e3f858583818110610e3357610e32615eb9565b5b90506020020135610e73565b828281518110610e5257610e51615eb9565b5b6020026020010181905250806001019050610e12565b508091505092915050565b610e7b6146e0565b6000610193600084815260200190815260200160002090506000610ea182600501612ad9565b905060008167ffffffffffffffff811115610ebf57610ebe614f22565b5b604051908082528060200260200182016040528015610eed5781602001602082028036833780820191505090505b50905060008267ffffffffffffffff811115610f0c57610f0b614f22565b5b604051908082528060200260200182016040528015610f3a5781602001602082028036833780820191505090505b50905060005b83811015610fd657610f5e8186600501612aee90919063ffffffff16565b838281518110610f7157610f70615eb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505086828281518110610fbf57610fbe615eb9565b5b602002602001018181525050806001019050610f40565b506000610fe28761225d565b90506040518061010001604052808881526020018660000154815260200186600101548152602001828152602001611025898489612b089092919063ffffffff16565b815260200186600201548152602001866003015481526020018481525095505050505050919050565b6040517fbf24148800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61108982610bd1565b61109281612b7f565b61109c8383612b93565b505050565b6110a9612692565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d90615f5a565b60405180910390fd5b6111208282612ba9565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61114e81612b7f565b611156612bbf565b50565b600061019660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f813b9efdf6afe6b57682eb1fb850711edc34da21ae7f7376cb7a391b1be3239f6111ae81612b7f565b600061019760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d932dfb866040518263ffffffff1660e01b815260040161120c9190614868565b602060405180830381865afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d9190615dbe565b905060006101936000838152602001908152602001600020905061127081612c22565b6112b157816040517f25f878170000000000000000000000000000000000000000000000000000000081526004016112a89190614868565b60405180910390fd5b60006112d0836112c08561225d565b84612c339092919063ffffffff16565b90508086111561131757826040517f610d283800000000000000000000000000000000000000000000000000000000815260040161130e9190614868565b60405180910390fd5b60008087116113265781611328565b865b9050600061133884600501612cb8565b90506000815167ffffffffffffffff81111561135757611356614f22565b5b6040519080825280602002602001820160405280156113855781602001602082028036833780820191505090505b50905060005b82518110156113e2576113b88382815181106113aa576113a9615eb9565b5b6020026020010151886108cc565b8282815181106113cb576113ca615eb9565b5b60200260200101818152505080600101905061138b565b506000825167ffffffffffffffff811115611400576113ff614f22565b5b60405190808252806020026020018201604052801561142e5781602001602082028036833780820191505090505b5090506000805b600185516114439190615f7a565b8110156114cf57600061148d878b8b89868151811061146557611464615eb9565b5b60200260200101518987815181106114805761147f615eb9565b5b6020026020010151612cd9565b9050808483815181106114a3576114a2615eb9565b5b60200260200101818152505080836114bb9190615e1a565b925050806114c890615fae565b9050611435565b5080856114dc9190615f7a565b82600186516114eb9190615f7a565b815181106114fc576114fb615eb9565b5b60200260200101818152505060005b84518110156115f05761155385828151811061152a57611529615eb9565b5b60200260200101518a85848151811061154657611545615eb9565b5b6020026020010151612891565b82818151811061156657611565615eb9565b5b602002602001015188600801600087848151811061158757611586615eb9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115d89190615e1a565b92505081905550806115e990615fae565b905061150b565b50848760030160008282546116059190615e1a565b925050819055508b88427f4d641c2ca9261584e3de048c803a63d133b28387ab704ace681fd7b220094b5288888760405161164293929190616065565b60405180910390a461019660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8b876040518363ffffffff1660e01b81526004016116a8929190615e4e565b6020604051808303816000875af11580156116c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116eb9190615e8c565b50505050505050505050505050565b60608151835114611740576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117379061611c565b60405180910390fd5b6000835167ffffffffffffffff81111561175d5761175c614f22565b5b60405190808252806020026020018201604052801561178b5781602001602082028036833780820191505090505b50905060005b8451811015611808576117d88582815181106117b0576117af615eb9565b5b60200260200101518583815181106117cb576117ca615eb9565b5b60200260200101516108cc565b8282815181106117eb576117ea615eb9565b5b6020026020010181815250508061180190615fae565b9050611791565b508091505092915050565b60008061181f8361225d565b119050919050565b61182f612d91565b7fb62aeb2ef35a3718e51a7e8b0b0d8e6fa690a4037bf45dad308976da469a861c61185981612b7f565b3073ffffffffffffffffffffffffffffffffffffffff1663a4b186f8866040518263ffffffff1660e01b81526004016118929190614868565b602060405180830381865afa1580156118af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d39190615e8c565b1561191557846040517fde20885c00000000000000000000000000000000000000000000000000000000815260040161190c9190614868565b60405180910390fd5b60006119278460ff168460ff16612071565b90506119338582612ddb565b61193e868683612e65565b505050505050565b6000603360009054906101000a900460ff16905090565b6000806101936000858152602001908152602001600020905061199e836119838661225d565b61198d86886108cc565b84612ef4909392919063ffffffff16565b91505092915050565b600080610193600084815260200190815260200160002090506119dd836119cd8561225d565b83612b089092919063ffffffff16565b915050919050565b606060006119f4610194612fd2565b67ffffffffffffffff811115611a0d57611a0c614f22565b5b604051908082528060200260200182016040528015611a3b5781602001602082028036833780820191505090505b50905060005b8151811015611a8957611a5f81610194612fe790919063ffffffff16565b828281518110611a7257611a71615eb9565b5b602002602001018181525050806001019050611a41565b508091505090565b611a99614725565b6000610193600084815260200190815260200160002090506040518060c001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001611ae886866108cc565b8152602001611b1586611afa8761225d565b611b0489896108cc565b86612ef4909392919063ffffffff16565b81526020018260070160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018260080160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525091505092915050565b60606000825167ffffffffffffffff811115611bce57611bcd614f22565b5b604051908082528060200260200182016040528015611c0757816020015b611bf4614725565b815260200190600190039081611bec5790505b50905060005b8351811015611d1157611c4c6101936000868481518110611c3157611c30615eb9565b5b60200260200101518152602001908152602001600020612c22565b15611d06573073ffffffffffffffffffffffffffffffffffffffff1663639aa0ad86868481518110611c8157611c80615eb9565b5b60200260200101516040518363ffffffff1660e01b8152600401611ca6929190615e4e565b60c060405180830381865afa158015611cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce791906161f6565b828281518110611cfa57611cf9615eb9565b5b60200260200101819052505b806001019050611c0d565b508091505092915050565b60008061019360008481526020019081526020016000209050611d5283611d428561225d565b83612c339092919063ffffffff16565b915050919050565b60008060019054906101000a900460ff16159050808015611d8b5750600160008054906101000a900460ff1660ff16105b80611db85750611d9a30613001565b158015611db75750600160008054906101000a900460ff1660ff16145b5b611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90616295565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015611e34576001600060016101000a81548160ff0219169083151502179055505b611e556040518060600160405280603281526020016172e160329139613024565b611e5d61307f565b611e656130d0565b611e6d613121565b611e75613172565b611e7d6131c3565b611e8561322f565b611e8d613280565b611ea16000801b611e9c612692565b612b93565b611ed27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611ecd612692565b612b93565b611f037fb62aeb2ef35a3718e51a7e8b0b0d8e6fa690a4037bf45dad308976da469a861c611efe612692565b612b93565b611f347f813b9efdf6afe6b57682eb1fb850711edc34da21ae7f7376cb7a391b1be3239f611f2f612692565b612b93565b611f45600160006312cf357061227a565b8015611f9e5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051611f9591906162fa565b60405180910390a15b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611fcb81612b7f565b611fd36132d1565b50565b6000611ffe8261012d6000868152602001908152602001600020612aee90919063ffffffff16565b905092915050565b600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006101926000848152602001908152602001600020600083815260200190815260200160002054905092915050565b6000801b81565b6120ba6120b3612692565b8383613334565b5050565b60006120dc6101936000848152602001908152602001600020612c22565b9050919050565b60608282905067ffffffffffffffff81111561210257612101614f22565b5b60405190808252806020026020018201604052801561213557816020015b60608152602001906001900390816121205790505b50905060005b838390508110156121e8576121b73085858481811061215d5761215c615eb9565b5b905060200281019061216f9190616324565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134a0565b8282815181106121ca576121c9615eb9565b5b602002602001018190525080806121e090615fae565b91505061213b565b5092915050565b600061019160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f813b9efdf6afe6b57682eb1fb850711edc34da21ae7f7376cb7a391b1be3239f81565b600060c96000838152602001908152602001600020549050919050565b612282612d91565b6000801b61228f81612b7f565b600082036122c9576040517f98eb412400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81610192600086815260200190815260200160002060008581526020019081526020016000208190555050505050565b61019860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661233b612692565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f9cd0349200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061019160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123d89190615e1a565b925050819055505050565b600061240161012d6000848152602001908152602001600020612ad9565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61243582610bd1565b61243e81612b7f565b6124488383612ba9565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b612479612d91565b6000801b61248681612b7f565b8361019660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508261019760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508161019860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000609860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6040517fbf24148800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061268b575061268a82613584565b5b9050919050565b600033905090565b60006126a982601460046135fe565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612716906163f9565b60405180910390fd5b6000612729612692565b9050600061273685613662565b9050600061274385613662565b9050612754836000898585896136dc565b846097600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127b49190615e1a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612832929190616419565b60405180910390a461284983600089858589613875565b6128588360008989898961387d565b50505050505050565b6000612889836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613a54565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f7906164b4565b60405180910390fd5b600061290a612692565b9050600061291784613662565b9050600061292484613662565b9050612944838760008585604051806020016040528060008152506136dc565b60006097600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d390616546565b60405180910390fd5b8481036097600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612aaa929190616419565b60405180910390a4612ad084886000868660405180602001604052806000815250613875565b50505050505050565b6000612ae782600001613ac4565b9050919050565b6000612afd8360000183613ad5565b60001c905092915050565b6000612b1384612c22565b612b5457826040517f25f87817000000000000000000000000000000000000000000000000000000008152600401612b4b9190614868565b60405180910390fd5b8360020154612b6c8386613b0090919063ffffffff16565b612b769190615f7a565b90509392505050565b612b9081612b8b612692565b613b2a565b50565b612b9b612d91565b612ba58282613baf565b5050565b612bb1612d91565b612bbb8282613be4565b5050565b612bc7613c19565b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612c0b612692565b604051612c189190615233565b60405180910390a1565b600080826001015414159050919050565b6000612c3e84612c22565b612c7f57826040517f25f87817000000000000000000000000000000000000000000000000000000008152600401612c769190614868565b60405180910390fd5b612c928285613b0090919063ffffffff16565b612ca58386613c6290919063ffffffff16565b612caf9190615f7a565b90509392505050565b60606000612cc883600001613c7c565b905060608190508092505050919050565b600080612cf7612ce88761225d565b86613c6290919063ffffffff16565b9050600080821480612d095750600088145b15612d175760009050612d83565b60008660070160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082898683612d6b9190615e1a565b612d759190616566565b612d7f91906165d7565b9150505b809250505095945050505050565b612d99611946565b15612dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd090616654565b60405180910390fd5b565b60008203612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e15906166c0565b60405180910390fd5b60008103612e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e589061672c565b60405180910390fd5b5050565b6000610193600085815260200190815260200160002090508281600001819055508183612e929190615e1a565b8160010181905550612eaf84610194613cd890919063ffffffff16565b50837fc6bf85d136b95579125a47c9781847cacd55015777db8a853dd17946aed35fb2848360010154604051612ee6929190616419565b60405180910390a250505050565b600080612f0a8487613c6290919063ffffffff16565b9050600080821480612f1c5750600084145b15612f2a5760009050612fc5565b60008760070160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000612f85878a613b0090919063ffffffff16565b905060008287612f959190615e1a565b90506000858284612fa69190616566565b612fb091906165d7565b90508381612fbe9190615f7a565b9450505050505b8092505050949350505050565b6000612fe082600001613ac4565b9050919050565b6000612ff68360000183613ad5565b60001c905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a906167be565b60405180910390fd5b61307c81613cf2565b50565b600060019054906101000a900460ff166130ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c5906167be565b60405180910390fd5b565b600060019054906101000a900460ff1661311f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613116906167be565b60405180910390fd5b565b600060019054906101000a900460ff16613170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613167906167be565b60405180910390fd5b565b600060019054906101000a900460ff166131c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b8906167be565b60405180910390fd5b565b600060019054906101000a900460ff16613212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613209906167be565b60405180910390fd5b6000603360006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff1661327e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613275906167be565b60405180910390fd5b565b600060019054906101000a900460ff166132cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c6906167be565b60405180910390fd5b565b6132d9612d91565b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861331d612692565b60405161332a9190615233565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339990616850565b60405180910390fd5b80609860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134939190614923565b60405180910390a3505050565b60606134ab83613001565b6134ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e1906168e2565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051613512919061693e565b600060405180830381855af49150503d806000811461354d576040519150601f19603f3d011682016040523d82523d6000602084013e613552565b606091505b509150915061357a828260405180606001604052806027815260200161731360279139613d05565b9250505092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806135f757506135f682613d27565b5b9050919050565b60008060088361360e9190616566565b600160088661361d9190616566565b60026136299190616a88565b6136339190615f7a565b60001b901b90506000818660001b1690506008846136519190616566565b81901c60001c925050509392505050565b60606000600167ffffffffffffffff81111561368157613680614f22565b5b6040519080825280602002602001820160405280156136af5781602001602082028036833780820191505090505b50905082816000815181106136c7576136c6615eb9565b5b60200260200101818152505080915050919050565b6136e4612d91565b60008073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16149050600081801561375157508773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b9050811561385d5760005b855181101561385b57600086828151811061377a57613779615eb9565b5b60200260200101519050600061019360008381526020019081526020016000209050831561382b576137ca8a6137af8461225d565b6137b98d866108cc565b84612ef4909392919063ffffffff16565b8784815181106137dd576137dc615eb9565b5b6020026020010151111561382a5789826040517fe1b8b25f000000000000000000000000000000000000000000000000000000008152600401613821929190615e4e565b60405180910390fd5b5b6138466138378361225d565b82613b0090919063ffffffff16565b8160040181905550505080600101905061375c565b505b61386b888888888888613e09565b5050505050505050565b505050505050565b61389c8473ffffffffffffffffffffffffffffffffffffffff16613001565b15613a4c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016138e2959493929190616b1d565b6020604051808303816000875af192505050801561391e57506040513d601f19601f8201168201806040525081019061391b9190616b8c565b60015b6139c35761392a616bc6565b806308c379a003613986575061393e616be8565b806139495750613988565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397d91906149fb565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ba90616cea565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4190616d7c565b60405180910390fd5b505b505050505050565b6000613a608383613fd9565b613ab9578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613abe565b600090505b92915050565b600081600001805490509050919050565b6000826000018281548110613aed57613aec615eb9565b5b9060005260206000200154905092915050565b6000613b22613b188385613ffc90919063ffffffff16565b8460040154614095565b905092915050565b613b348282612006565b613bab57613b41816140ae565b613b4f8360001c60206140db565b604051602001613b60929190616e70565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba291906149fb565b60405180910390fd5b5050565b613bb98282614317565b613bdf8161012d600085815260200190815260200160002061286190919063ffffffff16565b505050565b613bee82826143f8565b613c148161012d60008581526020019081526020016000206144da90919063ffffffff16565b505050565b613c21611946565b613c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c5790616ef6565b60405180910390fd5b565b6000818360020154613c749190615e1a565b905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613ccc57602002820191906000526020600020905b815481526020019060010190808311613cb8575b50505050509050919050565b6000613cea836000018360001b613a54565b905092915050565b8060999081613d0191906170b8565b5050565b60608315613d1557829050613d20565b613d1f838361450a565b5b9392505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613df257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613e025750613e018261455a565b5b9050919050565b613e178686868686866145c4565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613ec85760005b8351811015613ec657828181518110613e6a57613e69615eb9565b5b602002602001015160c96000868481518110613e8957613e88615eb9565b5b602002602001015181526020019081526020016000206000828254613eae9190615e1a565b9250508190555080613ebf90615fae565b9050613e4e565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613fd15760005b8351811015613fcf576000848281518110613f1d57613f1c615eb9565b5b602002602001015190506000848381518110613f3c57613f3b615eb9565b5b60200260200101519050600060c9600084815260200190815260200160002054905081811015613fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f98906171fc565b60405180910390fd5b81810360c960008581526020019081526020016000208190555050505080613fc890615fae565b9050613eff565b505b505050505050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001015442106140245761401d8385613c6290919063ffffffff16565b905061408b565b60008460000154856001015461403a9190615f7a565b90508460000154421061408457808560000154426140589190615f7a565b61406b8688613c6290919063ffffffff16565b6140759190616566565b61407f91906165d7565b614087565b60005b9150505b8091505092915050565b60008183116140a457816140a6565b825b905092915050565b60606140d48273ffffffffffffffffffffffffffffffffffffffff16601460ff166140db565b9050919050565b6060600060028360026140ee9190616566565b6140f89190615e1a565b67ffffffffffffffff81111561411157614110614f22565b5b6040519080825280601f01601f1916602001820160405280156141435781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061417b5761417a615eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106141df576141de615eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261421f9190616566565b6142299190615e1a565b90505b60018111156142c9577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061426b5761426a615eb9565b5b1a60f81b82828151811061428257614281615eb9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806142c29061721c565b905061422c565b506000841461430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161430490617291565b60405180910390fd5b8091505092915050565b6143218282612006565b6143f457600160fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614399612692565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6144028282612006565b156144d657600060fb600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061447b612692565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000614502836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6145cc565b905092915050565b60008251111561451d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161455191906149fb565b60405180910390fd5b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b600080836001016000848152602001908152602001600020549050600081146146d45760006001826145fe9190615f7a565b90506000600186600001805490506146169190615f7a565b905081811461468557600086600001828154811061463757614636615eb9565b5b906000526020600020015490508087600001848154811061465b5761465a615eb9565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480614699576146986172b1565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506146da565b60009150505b92915050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147b082614785565b9050919050565b6147c0816147a5565b81146147cb57600080fd5b50565b6000813590506147dd816147b7565b92915050565b6000819050919050565b6147f6816147e3565b811461480157600080fd5b50565b600081359050614813816147ed565b92915050565b600080604083850312156148305761482f61477b565b5b600061483e858286016147ce565b925050602061484f85828601614804565b9150509250929050565b614862816147e3565b82525050565b600060208201905061487d6000830184614859565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6148b881614883565b81146148c357600080fd5b50565b6000813590506148d5816148af565b92915050565b6000602082840312156148f1576148f061477b565b5b60006148ff848285016148c6565b91505092915050565b60008115159050919050565b61491d81614908565b82525050565b60006020820190506149386000830184614914565b92915050565b6000602082840312156149545761495361477b565b5b600061496284828501614804565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149a557808201518184015260208101905061498a565b60008484015250505050565b6000601f19601f8301169050919050565b60006149cd8261496b565b6149d78185614976565b93506149e7818560208601614987565b6149f0816149b1565b840191505092915050565b60006020820190508181036000830152614a1581846149c2565b905092915050565b60008060408385031215614a3457614a3361477b565b5b6000614a4285828601614804565b9250506020614a5385828601614804565b9150509250929050565b6000819050919050565b614a7081614a5d565b82525050565b6000602082019050614a8b6000830184614a67565b92915050565b614a9a81614a5d565b8114614aa557600080fd5b50565b600081359050614ab781614a91565b92915050565b600060208284031215614ad357614ad261477b565b5b6000614ae184828501614aa8565b91505092915050565b600080600060608486031215614b0357614b0261477b565b5b6000614b11868287016147ce565b9350506020614b2286828701614804565b9250506040614b3386828701614804565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112614b6257614b61614b3d565b5b8235905067ffffffffffffffff811115614b7f57614b7e614b42565b5b602083019150836020820283011115614b9b57614b9a614b47565b5b9250929050565b60008060208385031215614bb957614bb861477b565b5b600083013567ffffffffffffffff811115614bd757614bd6614780565b5b614be385828601614b4c565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c24816147e3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c5f816147a5565b82525050565b6000614c718383614c56565b60208301905092915050565b6000602082019050919050565b6000614c9582614c2a565b614c9f8185614c35565b9350614caa83614c46565b8060005b83811015614cdb578151614cc28882614c65565b9750614ccd83614c7d565b925050600181019050614cae565b5085935050505092915050565b600061010083016000830151614d016000860182614c1b565b506020830151614d146020860182614c1b565b506040830151614d276040860182614c1b565b506060830151614d3a6060860182614c1b565b506080830151614d4d6080860182614c1b565b5060a0830151614d6060a0860182614c1b565b5060c0830151614d7360c0860182614c1b565b5060e083015184820360e0860152614d8b8282614c8a565b9150508091505092915050565b6000614da48383614ce8565b905092915050565b6000602082019050919050565b6000614dc482614bef565b614dce8185614bfa565b935083602082028501614de085614c0b565b8060005b85811015614e1c5784840389528151614dfd8582614d98565b9450614e0883614dac565b925060208a01995050600181019050614de4565b50829750879550505050505092915050565b60006020820190508181036000830152614e488184614db9565b905092915050565b600061010083016000830151614e696000860182614c1b565b506020830151614e7c6020860182614c1b565b506040830151614e8f6040860182614c1b565b506060830151614ea26060860182614c1b565b506080830151614eb56080860182614c1b565b5060a0830151614ec860a0860182614c1b565b5060c0830151614edb60c0860182614c1b565b5060e083015184820360e0860152614ef38282614c8a565b9150508091505092915050565b60006020820190508181036000830152614f1a8184614e50565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614f5a826149b1565b810181811067ffffffffffffffff82111715614f7957614f78614f22565b5b80604052505050565b6000614f8c614771565b9050614f988282614f51565b919050565b600067ffffffffffffffff821115614fb857614fb7614f22565b5b602082029050602081019050919050565b6000614fdc614fd784614f9d565b614f82565b90508083825260208201905060208402830185811115614fff57614ffe614b47565b5b835b8181101561502857806150148882614804565b845260208401935050602081019050615001565b5050509392505050565b600082601f83011261504757615046614b3d565b5b8135615057848260208601614fc9565b91505092915050565b600080fd5b600067ffffffffffffffff8211156150805761507f614f22565b5b615089826149b1565b9050602081019050919050565b82818337600083830152505050565b60006150b86150b384615065565b614f82565b9050828152602081018484840111156150d4576150d3615060565b5b6150df848285615096565b509392505050565b600082601f8301126150fc576150fb614b3d565b5b813561510c8482602086016150a5565b91505092915050565b600080600080600060a086880312156151315761513061477b565b5b600061513f888289016147ce565b9550506020615150888289016147ce565b945050604086013567ffffffffffffffff81111561517157615170614780565b5b61517d88828901615032565b935050606086013567ffffffffffffffff81111561519e5761519d614780565b5b6151aa88828901615032565b925050608086013567ffffffffffffffff8111156151cb576151ca614780565b5b6151d7888289016150e7565b9150509295509295909350565b600080604083850312156151fb576151fa61477b565b5b600061520985828601614aa8565b925050602061521a858286016147ce565b9150509250929050565b61522d816147a5565b82525050565b60006020820190506152486000830184615224565b92915050565b6000806000606084860312156152675761526661477b565b5b600061527586828701614804565b935050602061528686828701614804565b9250506040615297868287016147ce565b9150509250925092565b600067ffffffffffffffff8211156152bc576152bb614f22565b5b602082029050602081019050919050565b60006152e06152db846152a1565b614f82565b9050808382526020820190506020840283018581111561530357615302614b47565b5b835b8181101561532c578061531888826147ce565b845260208401935050602081019050615305565b5050509392505050565b600082601f83011261534b5761534a614b3d565b5b813561535b8482602086016152cd565b91505092915050565b6000806040838503121561537b5761537a61477b565b5b600083013567ffffffffffffffff81111561539957615398614780565b5b6153a585828601615336565b925050602083013567ffffffffffffffff8111156153c6576153c5614780565b5b6153d285828601615032565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006154148383614c1b565b60208301905092915050565b6000602082019050919050565b6000615438826153dc565b61544281856153e7565b935061544d836153f8565b8060005b8381101561547e5781516154658882615408565b975061547083615420565b925050600181019050615451565b5085935050505092915050565b600060208201905081810360008301526154a5818461542d565b905092915050565b600060ff82169050919050565b6154c3816154ad565b81146154ce57600080fd5b50565b6000813590506154e0816154ba565b92915050565b60008060008060808587031215615500576154ff61477b565b5b600061550e87828801614804565b945050602061551f87828801614804565b9350506040615530878288016154d1565b9250506060615541878288016154d1565b91505092959194509250565b600080604083850312156155645761556361477b565b5b600061557285828601614804565b9250506020615583858286016147ce565b9150509250929050565b60c0820160008201516155a36000850182614c56565b5060208201516155b66020850182614c1b565b5060408201516155c96040850182614c1b565b5060608201516155dc6060850182614c1b565b5060808201516155ef6080850182614c1b565b5060a082015161560260a0850182614c1b565b50505050565b600060c08201905061561d600083018461558d565b92915050565b6000806040838503121561563a5761563961477b565b5b6000615648858286016147ce565b925050602083013567ffffffffffffffff81111561566957615668614780565b5b61567585828601615032565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c0820160008201516156c16000850182614c56565b5060208201516156d46020850182614c1b565b5060408201516156e76040850182614c1b565b5060608201516156fa6060850182614c1b565b50608082015161570d6080850182614c1b565b5060a082015161572060a0850182614c1b565b50505050565b600061573283836156ab565b60c08301905092915050565b6000602082019050919050565b60006157568261567f565b615760818561568a565b935061576b8361569b565b8060005b8381101561579c5781516157838882615726565b975061578e8361573e565b92505060018101905061576f565b5085935050505092915050565b600060208201905081810360008301526157c3818461574b565b905092915050565b600080604083850312156157e2576157e161477b565b5b60006157f085828601614aa8565b925050602061580185828601614804565b9150509250929050565b61581481614908565b811461581f57600080fd5b50565b6000813590506158318161580b565b92915050565b6000806040838503121561584e5761584d61477b565b5b600061585c858286016147ce565b925050602061586d85828601615822565b9150509250929050565b60008083601f84011261588d5761588c614b3d565b5b8235905067ffffffffffffffff8111156158aa576158a9614b42565b5b6020830191508360208202830111156158c6576158c5614b47565b5b9250929050565b600080602083850312156158e4576158e361477b565b5b600083013567ffffffffffffffff81111561590257615901614780565b5b61590e85828601615877565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b600061596d82615946565b6159778185615951565b9350615987818560208601614987565b615990816149b1565b840191505092915050565b60006159a78383615962565b905092915050565b6000602082019050919050565b60006159c78261591a565b6159d18185615925565b9350836020820285016159e385615936565b8060005b85811015615a1f5784840389528151615a00858261599b565b9450615a0b836159af565b925060208a019950506001810190506159e7565b50829750879550505050505092915050565b60006020820190508181036000830152615a4b81846159bc565b905092915050565b600060208284031215615a6957615a6861477b565b5b6000615a77848285016147ce565b91505092915050565b600080600060608486031215615a9957615a9861477b565b5b6000615aa786828701614804565b9350506020615ab886828701614804565b9250506040615ac986828701614804565b9150509250925092565b6000615ade826147a5565b9050919050565b615aee81615ad3565b8114615af957600080fd5b50565b600081359050615b0b81615ae5565b92915050565b6000615b1c826147a5565b9050919050565b615b2c81615b11565b8114615b3757600080fd5b50565b600081359050615b4981615b23565b92915050565b6000615b5a826147a5565b9050919050565b615b6a81615b4f565b8114615b7557600080fd5b50565b600081359050615b8781615b61565b92915050565b600080600060608486031215615ba657615ba561477b565b5b6000615bb486828701615afc565b9350506020615bc586828701615b3a565b9250506040615bd686828701615b78565b9150509250925092565b60008060408385031215615bf757615bf661477b565b5b6000615c05858286016147ce565b9250506020615c16858286016147ce565b9150509250929050565b600080600080600060a08688031215615c3c57615c3b61477b565b5b6000615c4a888289016147ce565b9550506020615c5b888289016147ce565b9450506040615c6c88828901614804565b9350506060615c7d88828901614804565b925050608086013567ffffffffffffffff811115615c9e57615c9d614780565b5b615caa888289016150e7565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000615d13602a83614976565b9150615d1e82615cb7565b604082019050919050565b60006020820190508181036000830152615d4281615d06565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680615d9057607f821691505b602082108103615da357615da2615d49565b5b50919050565b600081519050615db8816147ed565b92915050565b600060208284031215615dd457615dd361477b565b5b6000615de284828501615da9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615e25826147e3565b9150615e30836147e3565b9250828201905080821115615e4857615e47615deb565b5b92915050565b6000604082019050615e636000830185615224565b615e706020830184614859565b9392505050565b600081519050615e868161580b565b92915050565b600060208284031215615ea257615ea161477b565b5b6000615eb084828501615e77565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000615f44602f83614976565b9150615f4f82615ee8565b604082019050919050565b60006020820190508181036000830152615f7381615f37565b9050919050565b6000615f85826147e3565b9150615f90836147e3565b9250828203905081811115615fa857615fa7615deb565b5b92915050565b6000615fb9826147e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615feb57615fea615deb565b5b600182019050919050565b600082825260208201905092915050565b600061601282614c2a565b61601c8185615ff6565b935061602783614c46565b8060005b8381101561605857815161603f8882614c65565b975061604a83614c7d565b92505060018101905061602b565b5085935050505092915050565b600060608201905061607a6000830186614859565b818103602083015261608c8185616007565b905081810360408301526160a0818461542d565b9050949350505050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000616106602983614976565b9150616111826160aa565b604082019050919050565b60006020820190508181036000830152616135816160f9565b9050919050565b600080fd5b600081519050616150816147b7565b92915050565b600060c0828403121561616c5761616b61613c565b5b61617660c0614f82565b9050600061618684828501616141565b600083015250602061619a84828501615da9565b60208301525060406161ae84828501615da9565b60408301525060606161c284828501615da9565b60608301525060806161d684828501615da9565b60808301525060a06161ea84828501615da9565b60a08301525092915050565b600060c0828403121561620c5761620b61477b565b5b600061621a84828501616156565b91505092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061627f602e83614976565b915061628a82616223565b604082019050919050565b600060208201905081810360008301526162ae81616272565b9050919050565b6000819050919050565b6000819050919050565b60006162e46162df6162da846162b5565b6162bf565b6154ad565b9050919050565b6162f4816162c9565b82525050565b600060208201905061630f60008301846162eb565b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261634157616340616315565b5b80840192508235915067ffffffffffffffff8211156163635761636261631a565b5b60208301925060018202360383131561637f5761637e61631f565b5b509250929050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006163e3602183614976565b91506163ee82616387565b604082019050919050565b60006020820190508181036000830152616412816163d6565b9050919050565b600060408201905061642e6000830185614859565b61643b6020830184614859565b9392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061649e602383614976565b91506164a982616442565b604082019050919050565b600060208201905081810360008301526164cd81616491565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000616530602483614976565b915061653b826164d4565b604082019050919050565b6000602082019050818103600083015261655f81616523565b9050919050565b6000616571826147e3565b915061657c836147e3565b925082820261658a816147e3565b915082820484148315176165a1576165a0615deb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006165e2826147e3565b91506165ed836147e3565b9250826165fd576165fc6165a8565b5b828204905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061663e601083614976565b915061664982616608565b602082019050919050565b6000602082019050818103600083015261666d81616631565b9050919050565b7f724e4f52493a20496e76616c69642073746172742074696d6500000000000000600082015250565b60006166aa601983614976565b91506166b582616674565b602082019050919050565b600060208201905081810360008301526166d98161669d565b9050919050565b7f724e4f52493a206475726174696f6e206e6f7420736574000000000000000000600082015250565b6000616716601783614976565b9150616721826166e0565b602082019050919050565b6000602082019050818103600083015261674581616709565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006167a8602b83614976565b91506167b38261674c565b604082019050919050565b600060208201905081810360008301526167d78161679b565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061683a602983614976565b9150616845826167de565b604082019050919050565b600060208201905081810360008301526168698161682d565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006168cc602683614976565b91506168d782616870565b604082019050919050565b600060208201905081810360008301526168fb816168bf565b9050919050565b600081905092915050565b600061691882615946565b6169228185616902565b9350616932818560208601614987565b80840191505092915050565b600061694a828461690d565b915081905092915050565b60008160011c9050919050565b6000808291508390505b60018511156169ac5780860481111561698857616987615deb565b5b60018516156169975780820291505b80810290506169a585616955565b945061696c565b94509492505050565b6000826169c55760019050616a81565b816169d35760009050616a81565b81600181146169e957600281146169f357616a22565b6001915050616a81565b60ff841115616a0557616a04615deb565b5b8360020a915084821115616a1c57616a1b615deb565b5b50616a81565b5060208310610133831016604e8410600b8410161715616a575782820a905083811115616a5257616a51615deb565b5b616a81565b616a648484846001616962565b92509050818404811115616a7b57616a7a615deb565b5b81810290505b9392505050565b6000616a93826147e3565b9150616a9e836147e3565b9250616acb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846169b5565b905092915050565b600082825260208201905092915050565b6000616aef82615946565b616af98185616ad3565b9350616b09818560208601614987565b616b12816149b1565b840191505092915050565b600060a082019050616b326000830188615224565b616b3f6020830187615224565b616b4c6040830186614859565b616b596060830185614859565b8181036080830152616b6b8184616ae4565b90509695505050505050565b600081519050616b86816148af565b92915050565b600060208284031215616ba257616ba161477b565b5b6000616bb084828501616b77565b91505092915050565b60008160e01c9050919050565b600060033d1115616be55760046000803e616be2600051616bb9565b90505b90565b600060443d10616c7557616bfa614771565b60043d036004823e80513d602482011167ffffffffffffffff82111715616c22575050616c75565b808201805167ffffffffffffffff811115616c405750505050616c75565b80602083010160043d038501811115616c5d575050505050616c75565b616c6c82602001850186614f51565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000616cd4603483614976565b9150616cdf82616c78565b604082019050919050565b60006020820190508181036000830152616d0381616cc7565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000616d66602883614976565b9150616d7182616d0a565b604082019050919050565b60006020820190508181036000830152616d9581616d59565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000616ddd601783616d9c565b9150616de882616da7565b601782019050919050565b6000616dfe8261496b565b616e088185616d9c565b9350616e18818560208601614987565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000616e5a601183616d9c565b9150616e6582616e24565b601182019050919050565b6000616e7b82616dd0565b9150616e878285616df3565b9150616e9282616e4d565b9150616e9e8284616df3565b91508190509392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000616ee0601483614976565b9150616eeb82616eaa565b602082019050919050565b60006020820190508181036000830152616f0f81616ed3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302616f787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82616f3b565b616f828683616f3b565b95508019841693508086168417925050509392505050565b6000616fb5616fb0616fab846147e3565b6162bf565b6147e3565b9050919050565b6000819050919050565b616fcf83616f9a565b616fe3616fdb82616fbc565b848454616f48565b825550505050565b600090565b616ff8616feb565b617003818484616fc6565b505050565b5b818110156170275761701c600082616ff0565b600181019050617009565b5050565b601f82111561706c5761703d81616f16565b61704684616f2b565b81016020851015617055578190505b61706961706185616f2b565b830182617008565b50505b505050565b600082821c905092915050565b600061708f60001984600802617071565b1980831691505092915050565b60006170a8838361707e565b9150826002028217905092915050565b6170c18261496b565b67ffffffffffffffff8111156170da576170d9614f22565b5b6170e48254615d78565b6170ef82828561702b565b600060209050601f8311600181146171225760008415617110578287015190505b61711a858261709c565b865550617182565b601f19841661713086616f16565b60005b8281101561715857848901518255600182019150602085019450602081019050617133565b868310156171755784890151617171601f89168261707e565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006171e6602883614976565b91506171f18261718a565b604082019050919050565b60006020820190508181036000830152617215816171d9565b9050919050565b6000617227826147e3565b91506000820361723a57617239615deb565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061727b602083614976565b915061728682617245565b602082019050919050565b600060208201905081810360008301526172aa8161726e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe68747470733a2f2f6e6f72692e636f6d2f6170692f7265737472696374696f6e7363686564756c652f7b69647d2e6a736f6e416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c8e6d521d1779451a84e1ad3f1ce7c6e4d44115591a8c18df155473e0b62f26d64736f6c63430008110033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
