{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC1155StakingERC20RewardsLinearPoolMock",
  "sourceName": "contracts/mocks/staking/linear/ERC1155StakingERC20RewardsLinearPoolMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "stakingToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "rewardToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "rewardHolder",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "scalingFactorDecimals",
          "type": "uint8"
        },
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IllegalInterfaceId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InconsistentArrayLengths",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenContract",
          "type": "address"
        }
      ],
      "name": "IncorrectTokenContractType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "claimable",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "claimed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "unclaimed",
          "type": "uint256"
        }
      ],
      "name": "InvalidClaimSum",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidDuration",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidRewardAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidStakeAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidWithdrawAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotContractOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "withdraw",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughStake",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotRoleHolder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentRewardRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newRewardRate",
          "type": "uint256"
        }
      ],
      "name": "RewardDilution",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RewardOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ScalingFactorOutOfBounds",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "claimData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "unclaimed",
          "type": "uint256"
        }
      ],
      "name": "Claimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewarder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "RewardAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewardHolder",
          "type": "address"
        }
      ],
      "name": "RewardHolderSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "stakeData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "withdrawData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "REWARDER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REWARD_TOKEN",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SCALING_FACTOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STAKING_TOKEN",
      "outputs": [
        {
          "internalType": "contract IERC1155",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "__msgData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "addReward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "balances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "claimData",
          "type": "bytes"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distributionEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "earned",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "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": "hasRole_",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastTimeRewardApplicable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastUpdated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC20s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC721[]",
          "name": "contracts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC721s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardHolder",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPerStakePoint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "rewardPerStakePointPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "paid",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPerStakePointStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "rewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "rewardHolder_",
          "type": "address"
        }
      ],
      "name": "setRewardHolder",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "stakeData",
          "type": "bytes"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "staked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalStaked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "withdrawData",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101003461027357601f613d9d38819003918201601f19168301916001600160401b038311848410176102785780849260a0946040528339810103126102735780516001600160a01b0381168103610273576020820151906001600160a01b03821682036102735760408301516001600160a01b03811693908490036102735760608101519060ff82168092036102735760800151906001600160a01b03821682036102735733610214575b7fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d916307f5828d60e41b600052826020526040600020600160ff198254161790556001600055608052604d81101561020357604d81116101ed57600a0a60a052630271189760e51b6000526020526040600020600160ff1982541617905560c05260e0528060018060a01b0319600a541617600a55604051907f92c047df6e363693ec05d0bd21ac0dbc9951c94b023c16966a58dd78f0e27d29600080a2613b0e908161028f823960805181818161292401528181613293015281816137b40152613903015260a051818181610aa501528181610da60152611c95015260c0518181816105be01528181611338015281816126a5015281816127e101528181612a5f01528181612ccd0152612e43015260e051818181610e4201526117cb0152f35b634e487b7160e01b600052601160045260246000fd5b63a54ad6c560e01b60005260046000fd5b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36100ab565b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c80628cc26214612ecf57806301ffc9a714612e675780630479d64414612df85780630700037d14612d955780630968f264146129485780632b4c9f16146128d95780632c9d0b80146128a05780632d1e0c02146124705780632f2ff15d146122c857806331e66e1e14612276578063569c93d214612224578063572b6c05146121d85780636806cc93146120c757806373c8a95814611f8f57806375c93bb914611bd75780637b0a47ee14611b9b57806380faa57d14611b5a578063817b1cd214611b1e5780638580cf7614611ac55780638bb9c5bf1461195b5780638da5cb5b146118e957806391d148541461185257806398807d84146117ef57806399248ea7146117805780639d696e3614611744578063bc197c8114611232578063c3666c3614610fa4578063c5c8f77014610f41578063c63ff8dd14610d20578063cbf1304d14610cb3578063d0b06f5d14610c77578063d547741f14610ac8578063ef4cadc514610a6f578063efa90b5414610a33578063f23a6e61146104fb578063f2fde38b146103d55763f7ba94bd146101b357600080fd5b346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d057610202903690600401612fc9565b60243567ffffffffffffffff81116103cc57610222903690600401612fc9565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061026361379d565b925416911690810361039f575081810361037757845b818110610284578580f35b61028f81838761345b565b3573ffffffffffffffffffffffffffffffffffffffff8116809103610373576102b982858761345b565b3590814710610343578780809381935af13d1561033b573d906102db826131c3565b916102e96040519384613153565b82523d88602084013e5b156103015750600101610279565b80518790156103135750602081519101fd5b807fd6bda2750000000000000000000000000000000000000000000000000000000060049252fd5b6060906102f3565b60448883477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b8680fd5b6004857f65825336000000000000000000000000000000000000000000000000000000008152fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b8380fd5b505b80fd5b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25761040d612f11565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061043761379d565b9073ffffffffffffffffffffffffffffffffffffffff8084541692168281036104d0575073ffffffffffffffffffffffffffffffffffffffff169182820361047d578380f35b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a33880808380f35b7f2ef4875e000000000000000000000000000000000000000000000000000000008552600452602484fd5b50346103d25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257610533612f11565b9061053c612f39565b9160843567ffffffffffffffff81116108715761055d903690600401612f5c565b505073ffffffffffffffffffffffffffffffffffffffff309116036105a7575b60206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823303610a0b5760405190826020830152604435604083015260643560608301526060825261060f608083613153565b60405191602083019484865261066184610635604082019460408652606083019061334d565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285613153565b61066961354d565b610672836134bb565b84958451850190604086602084019303126103735761069090613540565b925167ffffffffffffffff811161037357850181603f820112156103735760208101516106bc816131c3565b916106ca6040519384613153565b818352602083019360408284010111610a0757908360406106eb930161332a565b80518101602082820312610a035761070283613540565b156109035750906020826107199351010190613679565b939080925051845181036108db57879073ffffffffffffffffffffffffffffffffffffffff87165b818303610884575050506107fe575b5050505b83156107d6578373ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e9261079f60019788546130dc565b875516928385526006602052604085206107ba8382546130dc565b90556107cb6040519283928361343f565b0390a255388061057d565b6004837f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b813b156108805791859161084493836040518096819582947f2eb2c2d6000000000000000000000000000000000000000000000000000000008452308b60048601613742565b03925af180156108755790849161085c575b80610750565b8161086691613153565b610871578238610856565b8280fd5b6040513d86823e3d90fd5b8580fd5b9091996108ce8b6108d4928c6108a561089d848b6136fa565b51938c6136fa565b5192868252600960205260408220915260205260408d206108c78382546130dc565b90556130dc565b9a6136cd565b9190610741565b6004887f65825336000000000000000000000000000000000000000000000000000000008152fd5b61091593949850602091500190613588565b92915073ffffffffffffffffffffffffffffffffffffffff841686526009602052604086208187526020526040862061094f8482546130dc565b90558296610960575b505050610754565b813b15610880576040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201523060248201526044810191909152606481019290925260a06084830152600060a48301528490829060c490829084905af18015610875579084916109ee575b80610958565b816109f891613153565b6108715782386109e8565b8780fd5b8880fd5b6004827fc1ab6dc1000000000000000000000000000000000000000000000000000000008152fd5b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600554604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435610b03612f39565b610b0b61379d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361039f57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610bbd578480f35b7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b93610c6c918387526020526040862073ffffffffffffffffffffffffffffffffffffffff851660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b0390a1388080808480f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600254604051908152f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff610d05612f11565b16815260098352818120602435825283522054604051908152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d057610d70903690600401612f5c565b9190610d7a61354d565b610d8261379d565b90610d8c826134bb565b610d95826130e9565b9384610da4575b836001815580f35b7f0000000000000000000000000000000000000000000000000000000000000000610dcf81876131fd565b908015610f1457600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9182166024820152908616604482015260648082018490528152610e6690610e40608482613153565b7f0000000000000000000000000000000000000000000000000000000000000000613a4d565b85610ee75760009606939573ffffffffffffffffffffffffffffffffffffffff7f019eda09011e476781de26947e4b78ee0a834e7182f5ff2eb62bcf8c523f42ca959697169586825260076020526040822055610ed0604051948594606086526060860191612f8a565b91602084015260408301520390a280388080610d9c565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff610f93612f11565b168152600883522054604051908152f35b50346103d257610fb336612ffa565b929490939092917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610ff961379d565b925416911690810361039f5750808214801590611228575b61120057865b828110611022578780f35b73ffffffffffffffffffffffffffffffffffffffff61104a61104583858b61345b565b61349a565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156111f5578a916111b8575b501561118d57508773ffffffffffffffffffffffffffffffffffffffff6110d961104584868c61345b565b166110e861104584878a61345b565b6110f384888b61345b565b35823b156103cc576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448201529082908290606490829084905af180156111825761116d575b5050600101611017565b8161117791613153565b610a03578738611163565b6040513d84823e3d90fd5b7f986b9f1f000000000000000000000000000000000000000000000000000000008952600452602488fd5b90506020813d82116111ed575b816111d260209383613153565b810103126111e9576111e390613540565b386110ae565b8980fd5b3d91506111c5565b6040513d8c823e3d90fd5b6004877f65825336000000000000000000000000000000000000000000000000000000008152fd5b5082821415611011565b50346103d25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25761126a612f11565b90611273612f39565b60443567ffffffffffffffff811161087157611293903690600401612fc9565b60649291923567ffffffffffffffff8111611740576112b6903690600401612fc9565b9560843567ffffffffffffffff8111610373576112d7903690600401612f5c565b505073ffffffffffffffffffffffffffffffffffffffff30911603611321575b60206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001695863303611718576113e692916113ba9161138a604051978895600160208801526060604088015260808701916132ed565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160608601526132ed565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283613153565b60405191602083019484865261140c84610635604082019460408652606083019061334d565b61141461354d565b61141d836134bb565b84958451850190604086602084019303126103735761143b90613540565b925167ffffffffffffffff811161037357850181603f82011215610373576020810151611467816131c3565b916114756040519384613153565b818352602083019360408284010111610a075790836040611496930161332a565b80518101602082820312610a03576114ad83613540565b156116185750906020826114c49351010190613679565b939080925051845181036108db57879073ffffffffffffffffffffffffffffffffffffffff87165b8183036115f857505050611585575b5050505b83156107d6578373ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e9261154a60019788546130dc565b875516928385526006602052604085206115658382546130dc565b90556115766040519283928361343f565b0390a2553880808080806112f7565b813b15610880579185916115cb93836040518096819582947f2eb2c2d6000000000000000000000000000000000000000000000000000000008452308b60048601613742565b03925af18015610875579084916115e3575b806114fb565b816115ed91613153565b6108715782386115dd565b9091996108ce8b611611928c6108a561089d848b6136fa565b91906114ec565b61162a93949850602091500190613588565b92915073ffffffffffffffffffffffffffffffffffffffff84168652600960205260408620818752602052604086206116648482546130dc565b90558296611675575b5050506114ff565b813b15610880576040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201523060248201526044810191909152606481019290925260a06084830152600060a48301528490829060c490829084905af1801561087557908491611703575b8061166d565b8161170d91613153565b6108715782386116fd565b6004867fc1ab6dc1000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600454604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff611841612f11565b168152600683522054604051908152f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25773ffffffffffffffffffffffffffffffffffffffff60406118a1612f39565b927fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004358252602052209116600052602052602060ff604060002054166040519015158152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25750602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226119b861379d565b90838352806020526040832073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615611a7f578383526020908152604080842073ffffffffffffffffffffffffffffffffffffffff9390931660008181529383529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051948552908401829052830152907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90606090a180f35b5073ffffffffffffffffffffffffffffffffffffffff906044937f7aa7288200000000000000000000000000000000000000000000000000000000845260045216602452fd5b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760206040517f72657761726465720000000000000000000000000000000000000000000000008152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600154604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020611b936132db565b604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600354604051908152f35b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435602435611c1061379d565b907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b227f726577617264657200000000000000000000000000000000000000000000000085526020526040842073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615611f29578215611f01578015611ed9577f000000000000000000000000000000000000000000000000000000000000000080840290848204148091029015611eb157611ccd613236565b6004556005544210801590611ea6575b611e96575b60055490611cf083426130dc565b91428111611d595750928273ffffffffffffffffffffffffffffffffffffffff92611d3e6040957f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474976131fd565b6003556005555b42600255835195865260208601521692a280f35b91600393919354611d73611d6d428661308d565b826130c9565b85019485109485150294611e6e57838211611de2575050507f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec847492604092611dda611dd373ffffffffffffffffffffffffffffffffffffffff94429061308d565b80926131fd565b600355611d45565b91611df091935080946131fd565b90808210611e4057509260409273ffffffffffffffffffffffffffffffffffffffff927f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec847495600355600555611d45565b7f19e2447d000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b6004887f50082065000000000000000000000000000000000000000000000000000000008152fd5b611e9e6132db565b600255611ce2565b506001541515611cdd565b6004857f50082065000000000000000000000000000000000000000000000000000000008152fd5b6004847f76166401000000000000000000000000000000000000000000000000000000008152fd5b6004847f38539865000000000000000000000000000000000000000000000000000000008152fd5b60448473ffffffffffffffffffffffffffffffffffffffff847f7aa728820000000000000000000000000000000000000000000000000000000083527f726577617264657200000000000000000000000000000000000000000000000060045216602452fd5b50346103d257611f9e36612ffa565b92939186959195507fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611fe561379d565b925416911690810361039f57508083148015906120bd575b61120057865b83811061200e578780f35b61201981838861345b565b359073ffffffffffffffffffffffffffffffffffffffff82168203610a07576120b760019261204c61104584898961345b565b90612058848a8d61345b565b3573ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526120b2606483613153565b613a4d565b01612003565b5083831415611ffd565b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576120ff612f11565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061213e61379d565b925416911690810361039f575073ffffffffffffffffffffffffffffffffffffffff600a5491169073ffffffffffffffffffffffffffffffffffffffff81168203612187578280f35b7fffffffffffffffffffffffff0000000000000000000000000000000000000000168117600a557f92c047df6e363693ec05d0bd21ac0dbc9951c94b023c16966a58dd78f0e27d298280a238808280f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602061221a612215612f11565b61327c565b6040519015158152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576122ad6138ec565b6122c4604051928392602084526020840191612f8a565b0390f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435612303612f39565b61230b61379d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361039f57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416156123be578480f35b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d93610c6c918387526020526040862073ffffffffffffffffffffffffffffffffffffffff8516600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d0576124bb903690600401612f5c565b906124c461379d565b604051926124eb846106356020820195600187526040830194604086526060840191612f8a565b6124f361354d565b6124fc826134bb565b84928451850190604086602084019303126103735761251a90613540565b915167ffffffffffffffff811161037357850181603f8201121561037357602081015190612547826131c3565b916125556040519384613153565b808352602083019360408383010111610a0757836040612575930161332a565b86815182016020838203126103d05761258d84613540565b1561276d575050906020826125a59351010190613679565b929080925051835181036108db579087939291849073ffffffffffffffffffffffffffffffffffffffff87165b8183036127355750505061268e575b5050505b8115612666579073ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e9261262f836001546130dc565b600155169283855260066020526040852061264b8382546130dc565b905561265c6040519283928361343f565b0390a26001815580f35b6004847f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156103cc5761270b928492836040518096819582947f2eb2c2d6000000000000000000000000000000000000000000000000000000008452308c60048601613742565b03925af1801561118257612720575b806125e1565b8161272a91613153565b6103cc57833861271a565b91978495965061275b9061274e8a6127619496976136fa565b51908c6108a58c8b6136fa565b976136cd565b909189959493926125d2565b6020919496506127809392500190613588565b915073ffffffffffffffffffffffffffffffffffffffff84168352600960205260408320818452602052604083206127b98382546130dc565b905581946127ca575b5050506125e5565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156103cc576040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201523060248201526044810192909252606482015260a06084820152600060a4820152908290829060c490829084905af180156111825761288b575b806127c2565b8161289591613153565b6103cc578338612885565b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020611b93613236565b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d057612998903690600401612f5c565b6129a061379d565b836129aa836131c3565b936129b86040519586613153565b8385526020850193368183011161087157806020928637850101526129db61354d565b6129e4816134bb565b839183518401602085820312610880576129fd82613540565b15612c495750612a14906020855186010190613679565b91508051825181036112005790869291839073ffffffffffffffffffffffffffffffffffffffff86165b818303612bc35750505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156103cc57612ac5928492836040518096819582947f2eb2c2d60000000000000000000000000000000000000000000000000000000084528b3060048601613742565b03925af1801561118257612bae575b50505b8115612b865773ffffffffffffffffffffffffffffffffffffffff169182845260066020526040842054828110612b525790827faae638dec0d864ccb08558c28981bcfaee41330f57c4911cbe2d8432d0fb729e93928587526006602052036040862055816001540360015561265c6040519283928361343f565b905083927f2b6a77580000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b6004847fdb73cdf0000000000000000000000000000000000000000000000000000000008152fd5b81612bb891613153565b6103cc578338612ad4565b9196612c17612c3891898798612c1c8b899a612bef612be686612c3e9b9d6136fa565b519586926136fa565b519687928b8652600960205260408620838752602052836040872054938492828410156135aa565b61308d565b91878252600960205260408220915260205260408d20556130dc565b966136cd565b909188949392612a3e565b612c5892935060200190613588565b92915073ffffffffffffffffffffffffffffffffffffffff8216808652600960205260408620828752602052612c9d846040882054612c1781838789828410156135aa565b9086526009602052604086208287526020526040862055848373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610871576040517ff242432a00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff861660248201526044810194909452606484019190915260a06084840152600060a4840152829060c490829084905af18015612d8a57612d76575b50612ad7565b84612d8391959295613153565b9238612d70565b6040513d87823e3d90fd5b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff612de7612f11565b168152600783522054604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d257602061221a83613390565b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020611b93612f0c612f11565b6130e9565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612f3457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203612f3457565b9181601f84011215612f345782359167ffffffffffffffff8311612f345760208381860195010111612f3457565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9181601f84011215612f345782359167ffffffffffffffff8311612f34576020808501948460051b010111612f3457565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112612f345760043567ffffffffffffffff8111612f34578161304391600401612fc9565b9290929160243567ffffffffffffffff8111612f34578161306691600401612fc9565b929092916044359067ffffffffffffffff8211612f345761308991600401612fc9565b9091565b9190820391821161309a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181029291811591840414171561309a57565b9190820180921161309a57565b73ffffffffffffffffffffffffffffffffffffffff613150911680600052600660205261313b604060002054613135613120613236565b8460005260086020526040600020549061308d565b906130c9565b906000526007602052604060002054906130dc565b90565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761319457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161319457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b8115613207570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001548015613275576131509061326f6004549161326a6132616132586132db565b6002549061308d565b600354906130c9565b6131fd565b906130dc565b5060045490565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156132d45773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b60055480421060001461315057504290565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311612f345760209260051b809284830137010190565b60005b83811061333d5750506000910152565b818101518382015260200161332d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936133898151809281875287808801910161332a565b0116010190565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114613439577f01ffc9a7000000000000000000000000000000000000000000000000000000008114613433576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b92919061345660209160408652604086019061334d565b930152565b919081101561346b5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103612f345790565b6134c3613236565b6004556005544210801590613535575b613525575b73ffffffffffffffffffffffffffffffffffffffff811690816134f9575050565b613502906130e9565b816000526007602052604060002055600454906000526008602052604060002055565b61352d6132db565b6002556134d8565b5060015415156134d3565b51908115158203612f3457565b60026000541461355e576002600055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b90816060910312612f345761359c81613540565b916040602083015192015190565b9392919093156135ba5750505050565b6084945073ffffffffffffffffffffffffffffffffffffffff604051947f86301c82000000000000000000000000000000000000000000000000000000008652166004850152602484015260448301526064820152fd5b9080601f83011215612f345781519167ffffffffffffffff8311613194578260051b90604051936136456020840186613153565b8452602080850192820101928311612f3457602001905b8282106136695750505090565b815181526020918201910161365c565b91606083830312612f345761368d83613540565b92602081015167ffffffffffffffff8111612f3457836136ae918301613611565b92604082015167ffffffffffffffff8111612f34576131509201613611565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461309a5760010190565b805182101561346b5760209160051b010190565b906020808351928381520192019060005b81811061372c5750505090565b825184526020938401939092019160010161371f565b9261377e9073ffffffffffffffffffffffffffffffffffffffff61378c948160209895168752168686015260a0604086015260a085019061370e565b90838203606085015261370e565b906080818303910152600081520190565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156138dd5732331480156138e2575b6138dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115613825575b5061315057503390565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156138d157600091613897575b503861381b565b90506020813d6020116138c9575b816138b260209383613153565b81010312612f34576138c390613540565b38613890565b3d91506138a5565b6040513d6000823e3d90fd5b503390565b50601836106137e4565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613a3b573233148015613a43575b613a3b5780331490811561397f575b5061394e576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec360190368211612f345760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa9081156138d157600091613a01575b5038613942565b90506020813d602011613a33575b81613a1c60209383613153565b81010312612f3457613a2d90613540565b386139fa565b3d9150613a0f565b506000903690565b5060183610613933565b906000602091828151910182855af1156138d1576000513d613acf575073ffffffffffffffffffffffffffffffffffffffff81163b155b613a8b5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60011415613a8456fea2646970667358221220bf714f7dd4d0ca0a2ec4a4114fc00ab31f61a82930b4500eaa87250cb08ed1ee64736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b6000803560e01c80628cc26214612ecf57806301ffc9a714612e675780630479d64414612df85780630700037d14612d955780630968f264146129485780632b4c9f16146128d95780632c9d0b80146128a05780632d1e0c02146124705780632f2ff15d146122c857806331e66e1e14612276578063569c93d214612224578063572b6c05146121d85780636806cc93146120c757806373c8a95814611f8f57806375c93bb914611bd75780637b0a47ee14611b9b57806380faa57d14611b5a578063817b1cd214611b1e5780638580cf7614611ac55780638bb9c5bf1461195b5780638da5cb5b146118e957806391d148541461185257806398807d84146117ef57806399248ea7146117805780639d696e3614611744578063bc197c8114611232578063c3666c3614610fa4578063c5c8f77014610f41578063c63ff8dd14610d20578063cbf1304d14610cb3578063d0b06f5d14610c77578063d547741f14610ac8578063ef4cadc514610a6f578063efa90b5414610a33578063f23a6e61146104fb578063f2fde38b146103d55763f7ba94bd146101b357600080fd5b346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d057610202903690600401612fc9565b60243567ffffffffffffffff81116103cc57610222903690600401612fc9565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061026361379d565b925416911690810361039f575081810361037757845b818110610284578580f35b61028f81838761345b565b3573ffffffffffffffffffffffffffffffffffffffff8116809103610373576102b982858761345b565b3590814710610343578780809381935af13d1561033b573d906102db826131c3565b916102e96040519384613153565b82523d88602084013e5b156103015750600101610279565b80518790156103135750602081519101fd5b807fd6bda2750000000000000000000000000000000000000000000000000000000060049252fd5b6060906102f3565b60448883477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b8680fd5b6004857f65825336000000000000000000000000000000000000000000000000000000008152fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b8380fd5b505b80fd5b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25761040d612f11565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061043761379d565b9073ffffffffffffffffffffffffffffffffffffffff8084541692168281036104d0575073ffffffffffffffffffffffffffffffffffffffff169182820361047d578380f35b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a33880808380f35b7f2ef4875e000000000000000000000000000000000000000000000000000000008552600452602484fd5b50346103d25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257610533612f11565b9061053c612f39565b9160843567ffffffffffffffff81116108715761055d903690600401612f5c565b505073ffffffffffffffffffffffffffffffffffffffff309116036105a7575b60206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823303610a0b5760405190826020830152604435604083015260643560608301526060825261060f608083613153565b60405191602083019484865261066184610635604082019460408652606083019061334d565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285613153565b61066961354d565b610672836134bb565b84958451850190604086602084019303126103735761069090613540565b925167ffffffffffffffff811161037357850181603f820112156103735760208101516106bc816131c3565b916106ca6040519384613153565b818352602083019360408284010111610a0757908360406106eb930161332a565b80518101602082820312610a035761070283613540565b156109035750906020826107199351010190613679565b939080925051845181036108db57879073ffffffffffffffffffffffffffffffffffffffff87165b818303610884575050506107fe575b5050505b83156107d6578373ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e9261079f60019788546130dc565b875516928385526006602052604085206107ba8382546130dc565b90556107cb6040519283928361343f565b0390a255388061057d565b6004837f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b813b156108805791859161084493836040518096819582947f2eb2c2d6000000000000000000000000000000000000000000000000000000008452308b60048601613742565b03925af180156108755790849161085c575b80610750565b8161086691613153565b610871578238610856565b8280fd5b6040513d86823e3d90fd5b8580fd5b9091996108ce8b6108d4928c6108a561089d848b6136fa565b51938c6136fa565b5192868252600960205260408220915260205260408d206108c78382546130dc565b90556130dc565b9a6136cd565b9190610741565b6004887f65825336000000000000000000000000000000000000000000000000000000008152fd5b61091593949850602091500190613588565b92915073ffffffffffffffffffffffffffffffffffffffff841686526009602052604086208187526020526040862061094f8482546130dc565b90558296610960575b505050610754565b813b15610880576040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201523060248201526044810191909152606481019290925260a06084830152600060a48301528490829060c490829084905af18015610875579084916109ee575b80610958565b816109f891613153565b6108715782386109e8565b8780fd5b8880fd5b6004827fc1ab6dc1000000000000000000000000000000000000000000000000000000008152fd5b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600554604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435610b03612f39565b610b0b61379d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361039f57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610bbd578480f35b7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b93610c6c918387526020526040862073ffffffffffffffffffffffffffffffffffffffff851660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b0390a1388080808480f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600254604051908152f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff610d05612f11565b16815260098352818120602435825283522054604051908152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d057610d70903690600401612f5c565b9190610d7a61354d565b610d8261379d565b90610d8c826134bb565b610d95826130e9565b9384610da4575b836001815580f35b7f0000000000000000000000000000000000000000000000000000000000000000610dcf81876131fd565b908015610f1457600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9182166024820152908616604482015260648082018490528152610e6690610e40608482613153565b7f0000000000000000000000000000000000000000000000000000000000000000613a4d565b85610ee75760009606939573ffffffffffffffffffffffffffffffffffffffff7f019eda09011e476781de26947e4b78ee0a834e7182f5ff2eb62bcf8c523f42ca959697169586825260076020526040822055610ed0604051948594606086526060860191612f8a565b91602084015260408301520390a280388080610d9c565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff610f93612f11565b168152600883522054604051908152f35b50346103d257610fb336612ffa565b929490939092917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610ff961379d565b925416911690810361039f5750808214801590611228575b61120057865b828110611022578780f35b73ffffffffffffffffffffffffffffffffffffffff61104a61104583858b61345b565b61349a565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156111f5578a916111b8575b501561118d57508773ffffffffffffffffffffffffffffffffffffffff6110d961104584868c61345b565b166110e861104584878a61345b565b6110f384888b61345b565b35823b156103cc576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448201529082908290606490829084905af180156111825761116d575b5050600101611017565b8161117791613153565b610a03578738611163565b6040513d84823e3d90fd5b7f986b9f1f000000000000000000000000000000000000000000000000000000008952600452602488fd5b90506020813d82116111ed575b816111d260209383613153565b810103126111e9576111e390613540565b386110ae565b8980fd5b3d91506111c5565b6040513d8c823e3d90fd5b6004877f65825336000000000000000000000000000000000000000000000000000000008152fd5b5082821415611011565b50346103d25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25761126a612f11565b90611273612f39565b60443567ffffffffffffffff811161087157611293903690600401612fc9565b60649291923567ffffffffffffffff8111611740576112b6903690600401612fc9565b9560843567ffffffffffffffff8111610373576112d7903690600401612f5c565b505073ffffffffffffffffffffffffffffffffffffffff30911603611321575b60206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001695863303611718576113e692916113ba9161138a604051978895600160208801526060604088015260808701916132ed565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160608601526132ed565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283613153565b60405191602083019484865261140c84610635604082019460408652606083019061334d565b61141461354d565b61141d836134bb565b84958451850190604086602084019303126103735761143b90613540565b925167ffffffffffffffff811161037357850181603f82011215610373576020810151611467816131c3565b916114756040519384613153565b818352602083019360408284010111610a075790836040611496930161332a565b80518101602082820312610a03576114ad83613540565b156116185750906020826114c49351010190613679565b939080925051845181036108db57879073ffffffffffffffffffffffffffffffffffffffff87165b8183036115f857505050611585575b5050505b83156107d6578373ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e9261154a60019788546130dc565b875516928385526006602052604085206115658382546130dc565b90556115766040519283928361343f565b0390a2553880808080806112f7565b813b15610880579185916115cb93836040518096819582947f2eb2c2d6000000000000000000000000000000000000000000000000000000008452308b60048601613742565b03925af18015610875579084916115e3575b806114fb565b816115ed91613153565b6108715782386115dd565b9091996108ce8b611611928c6108a561089d848b6136fa565b91906114ec565b61162a93949850602091500190613588565b92915073ffffffffffffffffffffffffffffffffffffffff84168652600960205260408620818752602052604086206116648482546130dc565b90558296611675575b5050506114ff565b813b15610880576040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201523060248201526044810191909152606481019290925260a06084830152600060a48301528490829060c490829084905af1801561087557908491611703575b8061166d565b8161170d91613153565b6108715782386116fd565b6004867fc1ab6dc1000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600454604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff611841612f11565b168152600683522054604051908152f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25773ffffffffffffffffffffffffffffffffffffffff60406118a1612f39565b927fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004358252602052209116600052602052602060ff604060002054166040519015158152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25750602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226119b861379d565b90838352806020526040832073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615611a7f578383526020908152604080842073ffffffffffffffffffffffffffffffffffffffff9390931660008181529383529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051948552908401829052830152907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90606090a180f35b5073ffffffffffffffffffffffffffffffffffffffff906044937f7aa7288200000000000000000000000000000000000000000000000000000000845260045216602452fd5b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760206040517f72657761726465720000000000000000000000000000000000000000000000008152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600154604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020611b936132db565b604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020600354604051908152f35b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435602435611c1061379d565b907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b227f726577617264657200000000000000000000000000000000000000000000000085526020526040842073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615611f29578215611f01578015611ed9577f000000000000000000000000000000000000000000000000000000000000000080840290848204148091029015611eb157611ccd613236565b6004556005544210801590611ea6575b611e96575b60055490611cf083426130dc565b91428111611d595750928273ffffffffffffffffffffffffffffffffffffffff92611d3e6040957f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474976131fd565b6003556005555b42600255835195865260208601521692a280f35b91600393919354611d73611d6d428661308d565b826130c9565b85019485109485150294611e6e57838211611de2575050507f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec847492604092611dda611dd373ffffffffffffffffffffffffffffffffffffffff94429061308d565b80926131fd565b600355611d45565b91611df091935080946131fd565b90808210611e4057509260409273ffffffffffffffffffffffffffffffffffffffff927f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec847495600355600555611d45565b7f19e2447d000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b6004887f50082065000000000000000000000000000000000000000000000000000000008152fd5b611e9e6132db565b600255611ce2565b506001541515611cdd565b6004857f50082065000000000000000000000000000000000000000000000000000000008152fd5b6004847f76166401000000000000000000000000000000000000000000000000000000008152fd5b6004847f38539865000000000000000000000000000000000000000000000000000000008152fd5b60448473ffffffffffffffffffffffffffffffffffffffff847f7aa728820000000000000000000000000000000000000000000000000000000083527f726577617264657200000000000000000000000000000000000000000000000060045216602452fd5b50346103d257611f9e36612ffa565b92939186959195507fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611fe561379d565b925416911690810361039f57508083148015906120bd575b61120057865b83811061200e578780f35b61201981838861345b565b359073ffffffffffffffffffffffffffffffffffffffff82168203610a07576120b760019261204c61104584898961345b565b90612058848a8d61345b565b3573ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526120b2606483613153565b613a4d565b01612003565b5083831415611ffd565b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576120ff612f11565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061213e61379d565b925416911690810361039f575073ffffffffffffffffffffffffffffffffffffffff600a5491169073ffffffffffffffffffffffffffffffffffffffff81168203612187578280f35b7fffffffffffffffffffffffff0000000000000000000000000000000000000000168117600a557f92c047df6e363693ec05d0bd21ac0dbc9951c94b023c16966a58dd78f0e27d298280a238808280f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602061221a612215612f11565b61327c565b6040519015158152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576122ad6138ec565b6122c4604051928392602084526020840191612f8a565b0390f35b50346103d25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435612303612f39565b61230b61379d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361039f57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416156123be578480f35b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d93610c6c918387526020526040862073ffffffffffffffffffffffffffffffffffffffff8516600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d0576124bb903690600401612f5c565b906124c461379d565b604051926124eb846106356020820195600187526040830194604086526060840191612f8a565b6124f361354d565b6124fc826134bb565b84928451850190604086602084019303126103735761251a90613540565b915167ffffffffffffffff811161037357850181603f8201121561037357602081015190612547826131c3565b916125556040519384613153565b808352602083019360408383010111610a0757836040612575930161332a565b86815182016020838203126103d05761258d84613540565b1561276d575050906020826125a59351010190613679565b929080925051835181036108db579087939291849073ffffffffffffffffffffffffffffffffffffffff87165b8183036127355750505061268e575b5050505b8115612666579073ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e9261262f836001546130dc565b600155169283855260066020526040852061264b8382546130dc565b905561265c6040519283928361343f565b0390a26001815580f35b6004847f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156103cc5761270b928492836040518096819582947f2eb2c2d6000000000000000000000000000000000000000000000000000000008452308c60048601613742565b03925af1801561118257612720575b806125e1565b8161272a91613153565b6103cc57833861271a565b91978495965061275b9061274e8a6127619496976136fa565b51908c6108a58c8b6136fa565b976136cd565b909189959493926125d2565b6020919496506127809392500190613588565b915073ffffffffffffffffffffffffffffffffffffffff84168352600960205260408320818452602052604083206127b98382546130dc565b905581946127ca575b5050506125e5565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156103cc576040517ff242432a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201523060248201526044810192909252606482015260a06084820152600060a4820152908290829060c490829084905af180156111825761288b575b806127c2565b8161289591613153565b6103cc578338612885565b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020611b93613236565b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d25760043567ffffffffffffffff81116103d057612998903690600401612f5c565b6129a061379d565b836129aa836131c3565b936129b86040519586613153565b8385526020850193368183011161087157806020928637850101526129db61354d565b6129e4816134bb565b839183518401602085820312610880576129fd82613540565b15612c495750612a14906020855186010190613679565b91508051825181036112005790869291839073ffffffffffffffffffffffffffffffffffffffff86165b818303612bc35750505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156103cc57612ac5928492836040518096819582947f2eb2c2d60000000000000000000000000000000000000000000000000000000084528b3060048601613742565b03925af1801561118257612bae575b50505b8115612b865773ffffffffffffffffffffffffffffffffffffffff169182845260066020526040842054828110612b525790827faae638dec0d864ccb08558c28981bcfaee41330f57c4911cbe2d8432d0fb729e93928587526006602052036040862055816001540360015561265c6040519283928361343f565b905083927f2b6a77580000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b6004847fdb73cdf0000000000000000000000000000000000000000000000000000000008152fd5b81612bb891613153565b6103cc578338612ad4565b9196612c17612c3891898798612c1c8b899a612bef612be686612c3e9b9d6136fa565b519586926136fa565b519687928b8652600960205260408620838752602052836040872054938492828410156135aa565b61308d565b91878252600960205260408220915260205260408d20556130dc565b966136cd565b909188949392612a3e565b612c5892935060200190613588565b92915073ffffffffffffffffffffffffffffffffffffffff8216808652600960205260408620828752602052612c9d846040882054612c1781838789828410156135aa565b9086526009602052604086208287526020526040862055848373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610871576040517ff242432a00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff861660248201526044810194909452606484019190915260a06084840152600060a4840152829060c490829084905af18015612d8a57612d76575b50612ad7565b84612d8391959295613153565b9238612d70565b6040513d87823e3d90fd5b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257604060209173ffffffffffffffffffffffffffffffffffffffff612de7612f11565b168152600783522054604051908152f35b50346103d257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d257600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d257602061221a83613390565b50346103d25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d2576020611b93612f0c612f11565b6130e9565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612f3457565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203612f3457565b9181601f84011215612f345782359167ffffffffffffffff8311612f345760208381860195010111612f3457565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9181601f84011215612f345782359167ffffffffffffffff8311612f34576020808501948460051b010111612f3457565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112612f345760043567ffffffffffffffff8111612f34578161304391600401612fc9565b9290929160243567ffffffffffffffff8111612f34578161306691600401612fc9565b929092916044359067ffffffffffffffff8211612f345761308991600401612fc9565b9091565b9190820391821161309a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181029291811591840414171561309a57565b9190820180921161309a57565b73ffffffffffffffffffffffffffffffffffffffff613150911680600052600660205261313b604060002054613135613120613236565b8460005260086020526040600020549061308d565b906130c9565b906000526007602052604060002054906130dc565b90565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761319457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161319457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b8115613207570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001548015613275576131509061326f6004549161326a6132616132586132db565b6002549061308d565b600354906130c9565b6131fd565b906130dc565b5060045490565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156132d45773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b60055480421060001461315057504290565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311612f345760209260051b809284830137010190565b60005b83811061333d5750506000910152565b818101518382015260200161332d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936133898151809281875287808801910161332a565b0116010190565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114613439577f01ffc9a7000000000000000000000000000000000000000000000000000000008114613433576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b92919061345660209160408652604086019061334d565b930152565b919081101561346b5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103612f345790565b6134c3613236565b6004556005544210801590613535575b613525575b73ffffffffffffffffffffffffffffffffffffffff811690816134f9575050565b613502906130e9565b816000526007602052604060002055600454906000526008602052604060002055565b61352d6132db565b6002556134d8565b5060015415156134d3565b51908115158203612f3457565b60026000541461355e576002600055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b90816060910312612f345761359c81613540565b916040602083015192015190565b9392919093156135ba5750505050565b6084945073ffffffffffffffffffffffffffffffffffffffff604051947f86301c82000000000000000000000000000000000000000000000000000000008652166004850152602484015260448301526064820152fd5b9080601f83011215612f345781519167ffffffffffffffff8311613194578260051b90604051936136456020840186613153565b8452602080850192820101928311612f3457602001905b8282106136695750505090565b815181526020918201910161365c565b91606083830312612f345761368d83613540565b92602081015167ffffffffffffffff8111612f3457836136ae918301613611565b92604082015167ffffffffffffffff8111612f34576131509201613611565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461309a5760010190565b805182101561346b5760209160051b010190565b906020808351928381520192019060005b81811061372c5750505090565b825184526020938401939092019160010161371f565b9261377e9073ffffffffffffffffffffffffffffffffffffffff61378c948160209895168752168686015260a0604086015260a085019061370e565b90838203606085015261370e565b906080818303910152600081520190565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156138dd5732331480156138e2575b6138dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115613825575b5061315057503390565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156138d157600091613897575b503861381b565b90506020813d6020116138c9575b816138b260209383613153565b81010312612f34576138c390613540565b38613890565b3d91506138a5565b6040513d6000823e3d90fd5b503390565b50601836106137e4565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015613a3b573233148015613a43575b613a3b5780331490811561397f575b5061394e576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec360190368211612f345760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa9081156138d157600091613a01575b5038613942565b90506020813d602011613a33575b81613a1c60209383613153565b81010312612f3457613a2d90613540565b386139fa565b3d9150613a0f565b506000903690565b5060183610613933565b906000602091828151910182855af1156138d1576000513d613acf575073ffffffffffffffffffffffffffffffffffffffff81163b155b613a8b5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60011415613a8456fea2646970667358221220bf714f7dd4d0ca0a2ec4a4114fc00ab31f61a82930b4500eaa87250cb08ed1ee64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
