ETH Price: $2,351.00 (-1.23%)

Contract

0x207cC690f234eB92061c9e7bD71A276EB35AD3DC

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Transaction Hash
Block
From
To
Pause Contract162729802025-08-07 5:40:33178 days ago1754545233IN
0x207cC690...EB35AD3DC
0 ETH0.000004060.04525
Withdraw162729632025-08-07 5:40:16178 days ago1754545216IN
0x207cC690...EB35AD3DC
0 ETH0.000006610.04525
Claim Relic162199462025-08-06 14:21:12179 days ago1754490072IN
0x207cC690...EB35AD3DC
0 ETH0.000018890.04525
Buy Relic161746572025-08-06 1:14:25179 days ago1754442865IN
0x207cC690...EB35AD3DC
0 ETH0.000021410.04525
Claim Relic161707162025-08-06 0:04:18179 days ago1754438658IN
0x207cC690...EB35AD3DC
0 ETH0.000012480.04525
Claim Relic161706272025-08-06 0:02:47179 days ago1754438567IN
0x207cC690...EB35AD3DC
0 ETH0.000011050.04525
Get Free Starter...161705642025-08-06 0:01:38179 days ago1754438498IN
0x207cC690...EB35AD3DC
0 ETH0.00001080.04525
Claim Relic161704752025-08-06 0:00:07179 days ago1754438407IN
0x207cC690...EB35AD3DC
0 ETH0.000012160.04525
Get Free Starter...161704482025-08-05 23:59:37179 days ago1754438377IN
0x207cC690...EB35AD3DC
0 ETH0.000012390.04525
Purchase Initial...161702622025-08-05 23:56:18179 days ago1754438178IN
0x207cC690...EB35AD3DC
0.0175 ETH0.00001370.04525
Buy Relic161341152025-08-05 13:27:24180 days ago1754400444IN
0x207cC690...EB35AD3DC
0 ETH0.000019260.04525
Modify Token161186982025-08-05 8:56:14180 days ago1754384174IN
0x207cC690...EB35AD3DC
0 ETH0.000006090.04525
Modify Token161185242025-08-05 8:53:18180 days ago1754383998IN
0x207cC690...EB35AD3DC
0 ETH0.000008650.04525
Assign Crew161144842025-08-05 7:43:36180 days ago1754379816IN
0x207cC690...EB35AD3DC
0 ETH0.000009760.04525
Unassign Crew161144512025-08-05 7:43:01180 days ago1754379781IN
0x207cC690...EB35AD3DC
0 ETH0.000013040.04525
Assign Crew161063802025-08-05 5:23:49180 days ago1754371429IN
0x207cC690...EB35AD3DC
0 ETH0.000011720.04525
Add Token161063602025-08-05 5:23:29180 days ago1754371409IN
0x207cC690...EB35AD3DC
0 ETH0.000009960.04525
Unassign Crew161048532025-08-05 4:57:16180 days ago1754369836IN
0x207cC690...EB35AD3DC
0 ETH0.00001080.04525
Toggle Token Ver...161047572025-08-05 4:55:36180 days ago1754369736IN
0x207cC690...EB35AD3DC
0 ETH0.000003880.04525
Modify Token161045702025-08-05 4:52:23180 days ago1754369543IN
0x207cC690...EB35AD3DC
0 ETH0.000008520.04525
Buy New Hangar160948902025-08-05 2:04:45180 days ago1754359485IN
0x207cC690...EB35AD3DC
0 ETH0.000010730.04525
Buy Relic160939692025-08-05 1:48:21180 days ago1754358501IN
0x207cC690...EB35AD3DC
0 ETH0.000020190.04525
Buy Relic160271972025-08-04 6:33:47181 days ago1754289227IN
0x207cC690...EB35AD3DC
0 ETH0.000021740.04525
Buy Relic160271392025-08-04 6:32:37181 days ago1754289157IN
0x207cC690...EB35AD3DC
0 ETH0.000021460.04525
Buy Relic159901942025-08-03 19:45:19181 days ago1754250319IN
0x207cC690...EB35AD3DC
0 ETH0.000020910.04525
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
162729632025-08-07 5:40:16178 days ago1754545216
0x207cC690...EB35AD3DC
0.035 ETH
161702622025-08-05 23:56:18179 days ago1754438178
0x207cC690...EB35AD3DC
0.0175 ETH
156499282025-07-30 17:34:33186 days ago1753896873
0x207cC690...EB35AD3DC
0.0175 ETH
155693812025-07-29 18:26:27187 days ago1753813587
0x207cC690...EB35AD3DC
0.14 ETH
154828362025-07-28 17:34:16188 days ago1753724056
0x207cC690...EB35AD3DC
0.0175 ETH
154501042025-07-28 8:15:37188 days ago1753690537
0x207cC690...EB35AD3DC
0.0175 ETH
154173372025-07-27 22:50:14188 days ago1753656614
0x207cC690...EB35AD3DC
0.0175 ETH
153550112025-07-27 4:57:52189 days ago1753592272
0x207cC690...EB35AD3DC
0.0175 ETH
153466742025-07-27 2:34:11189 days ago1753583651
0x207cC690...EB35AD3DC
0.0175 ETH
153411312025-07-27 0:58:32189 days ago1753577912
0x207cC690...EB35AD3DC
0.0175 ETH
153386012025-07-27 0:14:24189 days ago1753575264
0x207cC690...EB35AD3DC
0.0175 ETH
153371502025-07-26 23:49:22189 days ago1753573762
0x207cC690...EB35AD3DC
0.0175 ETH
153352932025-07-26 23:17:11189 days ago1753571831
0x207cC690...EB35AD3DC
0.4725 ETH
153328922025-07-26 22:35:38189 days ago1753569338
0x207cC690...EB35AD3DC
0.0175 ETH
152791552025-07-26 7:13:06190 days ago1753513986
0x207cC690...EB35AD3DC
0.0175 ETH
152779912025-07-26 6:52:58190 days ago1753512778
0x207cC690...EB35AD3DC
0.0175 ETH
152657072025-07-26 3:21:42190 days ago1753500102
0x207cC690...EB35AD3DC
0.0175 ETH
152321522025-07-25 17:36:56191 days ago1753465016
0x207cC690...EB35AD3DC
0.0175 ETH
152128022025-07-25 12:04:27191 days ago1753445067
0x207cC690...EB35AD3DC
0.0175 ETH
152004062025-07-25 8:31:40191 days ago1753432300
0x207cC690...EB35AD3DC
0.0175 ETH
151916942025-07-25 6:02:36191 days ago1753423356
0x207cC690...EB35AD3DC
0.0175 ETH
151916612025-07-25 6:02:02191 days ago1753423322
0x207cC690...EB35AD3DC
0.0175 ETH
151697432025-07-24 23:43:56191 days ago1753400636
0x207cC690...EB35AD3DC
0.0175 ETH
151685712025-07-24 23:22:36191 days ago1753399356
0x207cC690...EB35AD3DC
0.0175 ETH
151673602025-07-24 23:00:43191 days ago1753398043
0x207cC690...EB35AD3DC
0.0175 ETH
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xA0774206...4B9e93F1d
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Main

Compiler Version
v0.8.24+commit.e11b9ed9

ZkSolc Version
v1.5.2

Optimization Enabled:
Yes with Mode 3

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 31 : Main.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {EnumerableSetLib} from "solady/src/utils/EnumerableSetLib.sol";
import {FixedPointMathLib} from "solady/src/utils/FixedPointMathLib.sol";
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol";

import {INethereum} from "./interfaces/INethereum.sol";

import {Relic, RelicSource} from "./types/Relic.sol";    
import {Node} from "./types/Node.sol";
import {Crew, CrewType} from "./types/Crew.sol";

import {Token} from "./types/Token.sol";

import {Game} from "./types/Game.sol";
import {Faction} from "./types/Faction.sol";


import {Hangar} from "./types/Hangar.sol";
import {Ship} from "./types/Ship.sol";
import {NewHangar} from "./types/NewHangar.sol";
import {NewShip} from "./types/NewShip.sol";

import {Errors} from "./libraries/Errors.sol";
import {Events} from "./libraries/Events.sol";

import {PlayerExportData} from "./types/PlayerExportData.sol";
import {PlayerAssetData} from "./types/PlayerAssetData.sol";

// Batch initialization structs
struct NodeInit {
    string name;
    uint256 fluxRate;
    uint256 arcConsumption;
    uint256 cost;
    bool inProduction;
    uint256 supply;
    uint256 maxPerPlayer;
}

struct RelicInit {
    string name;
    uint256 fluxRate;
    uint256 syncRate;
    uint256 cost;
    bool inProduction;
    bool claimable;
    uint256 size;
    address claimToken;
    bool claimTokenIsERC721;
    uint256 supply;
    uint256 maxPerPlayer;
}

struct ShipInit {
    string name;
    uint256 maxNodes;
    uint256 maxCrew;
    uint256 totalArcOutput;
    uint256 cost;
    bool inProduction;
    uint256 x;
    uint256 y;
}

struct HangarInit {
    string name;
    uint256 maxRelics;
    uint256 cost;
    bool inProduction;
    uint256 x;
    uint256 y;
}

struct GameInit {
    uint256 syncRate;
    uint256 fluxRate;
    bool active;
}

// Nethereum main program
contract Main is Ownable {
    using MessageHashUtils for bytes32; // Para usar .toEthSignedMessageHash() en bytes32
    using ECDSA for bytes32;
    using EnumerableSetLib for EnumerableSetLib.Uint256Set;

    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    //            STORAGE
    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    uint256 public constant REWARDS_PRECISION = 1e18;

    /// @dev Nethereum token address.
    address public nethereum;

    /// @dev Vitalekh fee recipient.
    address public vitalekh;

    /// @dev Mining start block.
    uint256 public startBlock;
    bool public miningHasStarted;

    /// @dev Tracks last time we updated rewards.
    uint256 public lastRewardBlock;

    /// @dev Total network fluxrate.
    uint256 public totalFluxrate;
    uint256 public totalSyncrate;

    /// @dev Tracks nethereum per single flux.
    uint256 public cumulativeNethereumPerFlux;

    /// @dev Initial cooldown time is 24H.
    uint256 public cooldown = 24 hours;

    /// @dev Testing
    uint256 public crewIndex;
    mapping(uint256 => Crew) public crew;

    /// @dev Initial cooldown time is 24H.
    uint256 public gameCooldown = 48 hours;

    /// @dev Initial referral fee is 3%.
    uint256 public referralFee = 0.03e18;

    /// @dev Initial burn is 80%.
    uint256 public burnPct = 0.8e18;

    /// @dev Players total fluxrate.
    mapping(address => uint256) public playerFluxrate;

    /// @dev Players total syncrate.
    mapping(address => uint256) public playerSyncrate;

    /// @dev Players pending rewards.
    mapping(address => uint256) public playerPendingRewards;

    /// @dev Players debt (updated after rewards are updated for a player).
    mapping(address => uint256) public playerNethereumDebt;

    /// @dev Halvening every 4,200,000 blocks, roughly 50 days
    uint256 public constant HALVING_INTERVAL = 4_200_000;

    /// @dev Initial    nethereum per block
    uint256 public constant INITIAL_NETHEREUM_PER_BLOCK = 2.3e18; // 2.3 Nethereum per block

    uint256 public uniqueGameCount;
    uint256 public universalCrewId;
    mapping(address => uint256) public lastGamePlayTimestamp;
    mapping(address => uint256) public rewardsGameEndedTimestamp;

    // STARTER

    /// @dev Tracks new players initializing in the game.
    mapping(address => bool) public initializedStarterHangar;
    mapping(address => bool) public initializedStarterShip;


    /// @dev Tracks if a player has acquired a free ship.
    mapping(address => bool) public acquiredStarterShip;
    mapping(address => bool) public acquiredStarterRelic;


    /// @dev Tracks if a player has acquired a free node.
    mapping(address => bool) public acquiredStarterNode;

    /// @dev Purchasing initial hangar price in ETH.
    uint256 public initialHangarPrice = 0.015 ether;

    /// @dev start ship, node and hangar index (these will never change since every player starts with same hangar).
    uint256 public immutable STARTER_SHIP_INDEX;
    uint256 public immutable STARTER_NODE_INDEX;
    uint256 public immutable STARTER_HANGAR_INDEX;
    uint256 public immutable STARTER_RELIC_INDEX;

    // FACTIONS

    mapping(uint256 => Faction) public factions;
    uint256 public totalFactions;
    mapping(address => uint256) public playerFaction;
    mapping(address => uint256) public lastFactionChange;
    uint256 public factionChangeCooldown = 30 days;
    uint256 public maxFactionMembers = 100;

    // RELICS

    // every relic has an id
    uint256 universalRelicId;

    /// @dev Total unique relics.
    uint256 public uniqueRelicCount;

    /// @dev Tracks different relics and its stats.
    mapping(uint256 => Relic) public relics;

    /// @dev Tracks how many of each relic a player has. Only tracks Id.
    mapping(address => EnumerableSetLib.Uint256Set) public playerRelicsOwned;

    /// @dev Maps relicId to the actual relic struct
    mapping(uint256 => Relic) public playerRelicsId;

    /// @dev Tracks if a there's a secondary market for a certain relic.
    mapping(uint256 => uint256) public relicSecondHandMarket;

    /// @dev Tracks each relics coords for a player
    mapping(address => mapping(uint256 => mapping(uint256 => bool))) public playerRelicsOccupiedCoords;

    // NETHEREUM ONLY

    /// @dev Emergency pause for claims while keeping mining active
    bool public claimsPaused = false;

    /// @dev Emergency pause for all contract interactions (except views)
    bool public contractPaused = false;

    /// @dev Track all players who have ever interacted with the contract
    address[] public allPlayers;
    mapping(address => bool) public isPlayerRegistered;

    // NODES

    // every node has an id
    uint256 universalNodeId;

    /// @dev Total unique nodes.
    uint256 public uniqueNodeCount;

    /// @dev Tracks different nodes and its stats.
    mapping(uint256 => Node) public nodes;

    /// @dev Tracks how many of each node a player has. Only tracks Id.
    mapping(address => EnumerableSetLib.Uint256Set) public playerNodesOwned;

    /// @dev Maps nodeId to the actual node struct
    mapping(uint256 => Node) public playerNodesId;

    /// @dev Tracks if a there's a secondary market for a certain node.
    mapping(uint256 => uint256) public nodeSecondHandMarket;

    /// @dev Tracks each nodes coords for a player
    mapping(address => mapping(uint256 => mapping(uint256 => bool))) public playerNodesOccupiedCoords;

    // SHIPS

    /// @dev Total ships.
    uint256 public shipCount;

    /// @dev Tracks different ships and its stats.
    mapping(uint256 => NewShip) public ships;

    /// @dev Tracks players ship stats.
    mapping(address => Ship) public ownerToShip;

    /// @dev Tracks last time a player upgraded their ship.
    mapping(address => uint256) public lastShipUpgradeTimestamp;


    // HANGARS

    /// @dev Total hangars.
    uint256 public hangarCount;

    /// @dev Tracks different hangars and its stats.
    mapping(uint256 => NewHangar) public hangars;

    /// @dev Tracks players hangar stats.
    mapping(address => Hangar) public ownerToHangar;

    /// @dev Tracks last time a player upgraded their hangar.
    mapping(address => uint256) public lastHangarUpgradeTimestamp;

    // REFERRALS

    /// @dev Tracks referrals.
    mapping(address => address) public referrals;

    /// @dev Tracks referred users.
    mapping(address => address[]) public referredUsers;

    /// @dev Track how much each referrer got paid.
    mapping(address => uint256) public referralBonusPaid;


    bool public requireCrewSignature = true;

    mapping(address => uint256) public lastClaimTimestamp;

    mapping(address => uint256) public playerMiningStart;

    mapping(address => uint256) public playerActiveGameIndex;

    // Tracks whether a player has claimed a relic via token gating
    mapping(address => mapping(uint256 => uint256)) public relicsClaimedCount;
    //CREW
    mapping(address => EnumerableSetLib.Uint256Set) public playerCrewOwned;
    mapping(uint256 => Crew) public playerCrewId;
    uint256 public crewSyncRate;


    //TOKEN
    mapping(address => Token) public tokens;

    // GAMES
    mapping(uint256 => Game) public games;

    mapping(address => uint256) public playerGameSyncrate;     // Current game syncrate bonus
    mapping(address => uint256) public playerGameFluxrate;     // Current game fluxrate bonus  
    mapping(address => uint256) public playerGameExpiry;       // When game bonus expires

    //COORDINATES - SEPARATE SYSTEMS
    /// @dev Tracks each crew coords for a player
    mapping(address => mapping(uint256 => mapping(uint256 => bool))) public playerCrewOccupiedCoords;

    //RELIC INVENTORY
    mapping(address => uint256[]) public playerRelicInventory;



    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    //          CONSTRUCTOR
    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    constructor() Ownable(msg.sender) {
        STARTER_NODE_INDEX = ++uniqueNodeCount;

        // add starter free node
        nodes[STARTER_NODE_INDEX] = Node(
            STARTER_NODE_INDEX,
            "Starter Node",
            0,
            0,
            0,
            20,
            1,
            type(uint256).max, // this is the free starter node, people cannot buy it
            false,
            10000000, 
            1
        );

        STARTER_RELIC_INDEX = ++uniqueRelicCount;

        relics[STARTER_RELIC_INDEX] = Relic(
            0,
            "Starter Relic",
            0,
            0,
            STARTER_RELIC_INDEX,
            1,
            0,
            type(uint256).max,
            false,
            RelicSource.Claimed,
            false,                   // not claimable
            1,                       // size
            address(0),              // claimToken
            false,                   // claimTokenIsERC721
            10000000,                // supply
            0,                       // claimedCount
            1                        // maxPerPlayer (unlimited for starter)
        );



        // add starter hangar
        hangars[++hangarCount] = NewHangar(
            "Starter Hangar",
            10,
            type(uint256).max,
            false,
            5,
            10
        );

        STARTER_HANGAR_INDEX = hangarCount;


        // add starter ship
        ships[++shipCount] = NewShip(
            "Starter Ship",
            3,
            3,
            28,
            type(uint256).max,
            false,
            4,
            2
        );

        STARTER_SHIP_INDEX = shipCount;

    }

    /**
    * @dev Modifier to check if contract interactions are paused
    */
    modifier whenNotPaused() {
        require(!contractPaused, "Contract is paused for migration");
        _;
    }

    /**
    * @dev Modifier to check if only claims are paused
    */
    modifier whenClaimsNotPaused() {
        require(!claimsPaused, "Claims are paused for migration");
        _;
    }

    

    function _registerPlayer(address player) internal {
    if (!isPlayerRegistered[player]) {
            isPlayerRegistered[player] = true;
            allPlayers.push(player);
            emit Events.PlayerRegistered(player);
        }
    }


    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    //        USER FUNCTIONS
    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    /**
     * @dev All new players must purchase an initial hangar with ETH.
     *
     * Players can only purchase new hangars after acquiring initial hangar.
     */
    function purchaseInitialHangar(address referrer) external payable whenNotPaused {
        _registerPlayer(msg.sender);
        if (msg.value != initialHangarPrice) {
            revert Errors.IncorrectValue();
        }

        if (initializedStarterHangar[msg.sender]) {
            revert Errors.AlreadyPurchasedInitialHangar();
        }

        if (referrer == msg.sender) {
            revert Errors.InvalidReferrer();
        }

        initializedStarterHangar[msg.sender] = true;

        if (referrer != address(0)) {
            referrals[msg.sender] = referrer;
            referredUsers[referrer].push(msg.sender);
        }

        NewHangar memory newHangar = hangars[STARTER_HANGAR_INDEX];
        Hangar storage hangar = ownerToHangar[msg.sender];

        // initialize players starter hangar
        hangar.hangarIndex = STARTER_HANGAR_INDEX;
        hangar.maxRelics = newHangar.maxRelics;
        hangar.x = newHangar.x;
        hangar.y = newHangar.y; 

        emit Events.InitialHangarPurchased(msg.sender);

    // INIT SHIP
        initializedStarterShip[msg.sender] = true;

        NewShip memory newShip = ships[STARTER_SHIP_INDEX];
        Ship storage ship = ownerToShip[msg.sender];

        // initialize players starter ship
        ship.shipIndex = STARTER_SHIP_INDEX;
        ship.maxNodes = newShip.maxNodes;
        ship.maxCrew = newShip.maxCrew;
        ship.totalArcOutput = newShip.totalArcOutput;
        ship.x = newShip.x;
        ship.y = newShip.y;

        emit Events.InitialShipPurchased(msg.sender);

    }

    /// NODES FUNCTIONS

    /**
     * @dev All new players can redeem 1 free node.
     *
     * Players are not required to redeem a free node.
     */
    function getFreeStarterNode(uint256 x, uint256 y) external whenNotPaused {
        if (acquiredStarterNode[msg.sender]) {
            revert Errors.StarterNodeAlreadyAcquired();
        }

        acquiredStarterNode[msg.sender] = true;

        Node memory node = nodes[STARTER_NODE_INDEX];
        Ship storage ship = ownerToShip[msg.sender];

        if (_isInvalidCoordinatesShipNodes(x, y, ship.x, ship.y)) {
            revert Errors.InvalidNodeCoordinates();
        }

        if (ship.currNodes >= ship.maxNodes) {
            revert Errors.ShipNodeCapacityReached();
        }


        if (ship.currArcOutput + node.arcConsumption > ship.totalArcOutput) {
            revert Errors.ShipInadequateArcOutput();
        }

        node.x = x;
        node.y = y;
        node.id = ++universalNodeId;
        playerNodesOccupiedCoords[msg.sender][x][y] = true;

        playerNodesOwned[msg.sender].add(node.id);         
        playerNodesId[node.id] = node;

        // increase ship nodes
        ship.currNodes++;

        // increase arc consumption from ship
        ship.currArcOutput += node.arcConsumption;

        // emit Events.FreeNodeRedeemed(msg.sender);
        emit Events.NodeBought(msg.sender, STARTER_NODE_INDEX, 0, universalNodeId, x, y);

        _increaseFluxrate(msg.sender, node.fluxRate);
    }

    /**
     * @dev All new players can redeem 1 free node.
     *
     * Players are not required to redeem a free node.
     */
    function getFreeStarterRelic(uint256 x, uint256 y) external whenNotPaused {
        if (acquiredStarterRelic[msg.sender]) {
            revert Errors.StarterRelicAlreadyAcquired();
        }

        acquiredStarterRelic[msg.sender] = true;

        Hangar storage hangar = ownerToHangar[msg.sender];

        if (_isInvalidCoordinatesHangarRelics(x, y, hangar.x, hangar.y)) {
            revert Errors.InvalidRelicCoordinates();
        }

        if (hangar.currRelics + 1 > hangar.maxRelics) {
            revert Errors.HangarFullofRelics();
        }

        Relic memory base = relics[STARTER_RELIC_INDEX];
        uint256 relicId = ++universalRelicId;

        Relic memory starter = Relic(
            relicId,
            base.name,
            x,
            y,
            STARTER_RELIC_INDEX,
            base.fluxRate,
            base.syncRate,
            base.cost,
            false,                   // not in production
            RelicSource.Claimed,
            false,                   // not claimable by token again
            base.size,
            address(0),              // claimToken (not needed for starter)
            false,                   // claimTokenIsERC721
            10000000,       // supply (unlimited)
            0,                       // claimedCount
            1        // maxPerPlayer (unlimited for starter)
        );

        playerRelicsOccupiedCoords[msg.sender][x][y] = true;
        playerRelicsOwned[msg.sender].add(relicId);
        playerRelicsId[relicId] = starter;

        hangar.currRelics++;

        emit Events.RelicBought(msg.sender, STARTER_RELIC_INDEX, 0, relicId, x, y, 1);

        _increaseFluxrate(msg.sender, starter.fluxRate);
        _increaseSyncrate(msg.sender, starter.syncRate);
    }

    function setRelicClaimSupply(uint256 relicIndex, uint256 newSupply) external onlyOwner {
        if (relicIndex == 0 || relicIndex > uniqueRelicCount) {
            revert Errors.NonExistentRelic();
        }
        
        relics[relicIndex].supply = newSupply;
    }

    function changeShipCost(uint256 shipIndex, uint256 newCostInTokens) external onlyOwner {
        if (shipIndex > shipCount) {
            revert Errors.NonExistentShip();
        }

        if (shipIndex == STARTER_SHIP_INDEX) {
            revert Errors.CantModifyStarterShip();
        }

        NewShip storage ship = ships[shipIndex];
        ship.cost = newCostInTokens * 1e18;  // ← Auto-convert

        emit Events.ShipCostChanged(shipIndex, newCostInTokens * 1e18);
    }

    /**
     * @dev Purchase new nodes using nethereum.
     */
    function buyNode(uint256 nodeIndex, uint256 x, uint256 y) external whenNotPaused {
        Node memory node = nodes[nodeIndex];
        Ship storage ship = ownerToShip[msg.sender];

        if (_isInvalidCoordinatesShipNodes(x, y, ship.x, ship.y)) {
            revert Errors.InvalidNodeCoordinates();
        }

        if (!node.inProduction) {
            revert Errors.NodeNotInProduction();
        }

        if (node.supply == 0) {
            revert Errors.NodeSoldOut();
        }

        if (ship.currNodes >= ship.maxNodes) {
            revert Errors.ShipNodeCapacityReached();
        }

        uint256 ownedOfThisType;
        EnumerableSetLib.Uint256Set storage owned = playerNodesOwned[msg.sender];

        for (uint256 i = 0; i < owned.length(); ++i) {
            uint256 ownedNodeId = owned.at(i);
            if (playerNodesId[ownedNodeId].nodeIndex == nodeIndex) {
                ++ownedOfThisType;
            }
        }

        if (ownedOfThisType >= node.maxPerPlayer) {
            revert Errors.NodeMaxReached();
        }

        if (INethereum(nethereum).balanceOf(msg.sender) < node.cost) {
            revert Errors.NoCasho();
        }

        if (ship.currArcOutput + node.arcConsumption > ship.totalArcOutput) {
            revert Errors.ShipInadequateArcOutput();
        }

        INethereum(nethereum).transferFrom(msg.sender, address(this), node.cost);
        INethereum(nethereum).burn(FixedPointMathLib.mulWad(node.cost, burnPct));

        node.x = x;
        node.y = y;
        node.id = ++universalNodeId;

        playerNodesOccupiedCoords[msg.sender][x][y] = true;
        playerNodesOwned[msg.sender].add(node.id);
        playerNodesId[node.id] = node;

        ship.currNodes++;
        ship.currArcOutput += node.arcConsumption;

        nodes[nodeIndex].supply--; // 

        emit Events.NodeBought(msg.sender, nodeIndex, node.cost, node.id, x, y);

        _increaseFluxrate(msg.sender, node.fluxRate);
    }


    function modifyToken(
        address contractCollection,
        string memory slug,
        bool isVerified,
        string memory chain,
        CrewType crewType,
        uint256 fluxRate,
        uint256 syncRate
    ) external onlyOwner {
        // Check if contract exists
        if (tokens[contractCollection].contractCollection == address(0)) {
            revert Errors.TokenDoesNotExist();
        }
        
        // Update token info
        tokens[contractCollection] = Token(contractCollection, slug, isVerified, chain);

        // Find and update the crew template for this contract
        bool found = false;
        for (uint256 i = 0; i < crewIndex; i++) {
            if (crew[i].contractCollection == contractCollection) {
                crew[i].name = slug;
                crew[i].fluxRate = fluxRate;
                crew[i].syncRate = syncRate;
                crew[i].crewType = crewType;
                found = true;
                break;
            }
        }
        
        if (!found) {
            revert Errors.CrewTemplateNotFound();
        }

        emit Events.TokenModified(contractCollection, slug, isVerified, chain);
    }

    function tokenExists(address contractCollection) external view returns (bool) {
        return tokens[contractCollection].contractCollection != address(0);
    }

    function getTokenInfo(address contractCollection) external view returns (
        address tokenContract,
        string memory slug,
        bool isVerified,
        string memory chain
    ) {
        Token memory token = tokens[contractCollection];
        return (token.contractCollection, token.slug, token.isVerified, token.chain);
    }

    function getCrewTemplate(address contractCollection) external view returns (
        uint256 id,
        string memory name,
        uint256 fluxRate,
        uint256 syncRate,
        CrewType crewType
    ) {
        for (uint256 i = 0; i < crewIndex; i++) {
            if (crew[i].contractCollection == contractCollection) {
                Crew memory crewTemplate = crew[i];
                return (
                    crewTemplate.id,
                    crewTemplate.name,
                    crewTemplate.fluxRate,
                    crewTemplate.syncRate,
                    crewTemplate.crewType
                );
            }
        }
        revert Errors.CrewTemplateNotFound();
    }



    /**
     * @dev Add Token.

     VERIFIED ALL OF THIS BLOCK CODE
     */
    function addToken(
        address contractCollection,
        string memory slug,
        bool isVerified,
        string memory chain,
        CrewType crewType,
        uint256 fluxRate,
        uint256 syncRate
    ) external onlyOwner {
        // Check if contract already exists
        if (tokens[contractCollection].contractCollection != address(0)) {
            revert Errors.TokenAlreadyExists();
        }
        
        tokens[contractCollection] = Token(contractCollection, slug, isVerified, chain);

        // Create crew template with actual stats
        crew[crewIndex] = Crew({
            id: crewIndex, 
            name: slug,
            x: 0,
            y: 0,
            fluxRate: fluxRate,
            syncRate: syncRate,
            contractCollection: contractCollection,
            tokenId: 0,
            crewType: crewType
        });

        crewIndex++;
        emit Events.NewTokenAdded(contractCollection, slug, isVerified, chain);
    }
    

    /**
     * @dev Add new faction.
     */
    function addFaction(string calldata name) external onlyOwner {
    factions[++totalFactions] = Faction({
        id: totalFactions,
        name: name,
        factionFluxrate: 0,
        active: true,
        currentMembers: 0
    });

    emit Events.FactionAdded(totalFactions, name);
    }

    /**
     * @dev Join faction.
     */
    function joinFaction(uint256 factionId) external whenNotPaused {
        _registerPlayer(msg.sender);
        if (factionId == 0 || factionId > totalFactions) {
            revert Errors.InvalidFaction();
        }

        if (block.timestamp - lastFactionChange[msg.sender] < factionChangeCooldown) {
            revert Errors.CannotChangeFactionYet();
        }

        if (!factions[factionId].active) {
            revert Errors.FactionNotActive();
        }

        if (factions[factionId].currentMembers >= maxFactionMembers) {
            revert Errors.FactionFull();
        }

        uint256 current = playerFaction[msg.sender];
        bool isSwitching = current != 0;

        if (isSwitching) {
            factions[current].factionFluxrate -= playerFluxrate[msg.sender];
            factions[current].currentMembers -= 1;
        }

        playerFaction[msg.sender] = factionId;
        lastFactionChange[msg.sender] = block.timestamp;

        factions[factionId].factionFluxrate += playerFluxrate[msg.sender];
        factions[factionId].currentMembers += 1;

        emit Events.PlayerJoinedFaction(msg.sender, factionId, isSwitching);
    }



    /**
     * @dev Get player faction.
     */
    function getPlayerFaction(address player) external view returns (Faction memory) {
    return factions[playerFaction[player]];
    }

    /**
     * @dev Set faction active.
     */
    function setFactionActive(uint256 factionId, bool isActive) external onlyOwner {
    if (factionId == 0 || factionId > totalFactions) {
        revert Errors.InvalidFaction();
    }

    factions[factionId].active = isActive;

    emit Events.FactionStatusChanged(factionId, isActive);
    }


    /**
     * @dev Get active factions.
     */
    function getActiveFactions() external view returns (Faction[] memory) {
    uint256 count;

    for (uint256 i = 1; i <= totalFactions; i++) {
        if (factions[i].active) count++;
    }

    Faction[] memory active = new Faction[](count);
    uint256 index;

    for (uint256 i = 1; i <= totalFactions; i++) {
        if (factions[i].active) {
            active[index++] = factions[i];
        }
    }

    return active;
    }

    /**
     * @dev Set max faction members.
     */
    function setMaxFactionMembers(uint256 newCap) external onlyOwner {
    maxFactionMembers = newCap;
    }


    // Assigns Crews
    function assignCrew(
        address contractCollection,
        uint256 x,
        uint256 y
    ) external whenNotPaused {
        _registerPlayer(msg.sender);
        
        // Check if contract was added via addToken() and is verified
        Token memory tokenInfo = tokens[contractCollection];
        if (tokenInfo.contractCollection == address(0)) {
            revert Errors.TokenDoesNotExist();
        }
        
        if (!tokenInfo.isVerified) {
            revert Errors.InvalidToken();
        }
        
        // CHECK: Player doesn't already have crew from this contract
        EnumerableSetLib.Uint256Set storage playerCrew = playerCrewOwned[msg.sender];
        for (uint256 i = 0; i < playerCrew.length(); i++) {
            uint256 existingCrewId = playerCrew.at(i);
            if (playerCrewId[existingCrewId].contractCollection == contractCollection) {
                revert Errors.AlreadyHaveCrewFromContract();
            }
        }
        
        // Find the crew template for this contract
        Crew memory crewTemplate;
        bool found = false;
        for (uint256 i = 0; i < crewIndex; i++) {
            if (crew[i].contractCollection == contractCollection) {
                crewTemplate = crew[i];
                found = true;
                break;
            }
        }
        
        if (!found) {
            revert Errors.CrewTemplateNotFound();
        }
        
        Ship storage ship = ownerToShip[msg.sender];

        if (_isInvalidCoordinatesShipCrew(x, y, ship.x, ship.y)) {
            revert Errors.InvalidCrewCoordinates();
        }

        if (ship.currCrew >= ship.maxCrew) {
            revert Errors.ShipCrewCapacityReached();
        }

        // TOKEN OWNERSHIP CHECK
        if (crewTemplate.crewType == CrewType.NFT) {
            if (IERC721(contractCollection).balanceOf(msg.sender) == 0) {
                revert Errors.MustOwnNFT();
            }
        } else if (crewTemplate.crewType == CrewType.Fungible) {
            if (IERC20(contractCollection).balanceOf(msg.sender) == 0) {
                revert Errors.MustOwnFungibleToken();
            }
        }

        // Create crew instance
        Crew memory newCrew = Crew({
            id: ++universalCrewId,
            name: crewTemplate.name,
            x: x,
            y: y,
            fluxRate: crewTemplate.fluxRate,
            syncRate: crewTemplate.syncRate,
            contractCollection: contractCollection,
            tokenId: 0,
            crewType: crewTemplate.crewType
        });

        // Captain position gets double syncrate
        uint256 actualSyncRate = newCrew.syncRate;
        if (x == 0 && y == 0) {
            actualSyncRate = newCrew.syncRate * 2;
        }
        
        playerCrewOccupiedCoords[msg.sender][x][y] = true;
        playerCrewOwned[msg.sender].add(universalCrewId);
        playerCrewId[universalCrewId] = newCrew;

        ship.currCrew++;

        emit Events.CrewAssigned(
            msg.sender, 
            universalCrewId, 
            0,
            x, 
            y, 
            contractCollection, 
            0,
            newCrew.crewType == CrewType.NFT ? "NFT" : "Fungible"
        );

        _increaseSyncrate(msg.sender, actualSyncRate);
        _increaseFluxrate(msg.sender, newCrew.fluxRate);
    }
    
    /**
     * @dev Unassign crew.
     */
    function unassignCrew(address contractCollection) external whenNotPaused {
        // Find the crew with this contract collection
        EnumerableSetLib.Uint256Set storage playerCrew = playerCrewOwned[msg.sender];
        uint256 crewId = 0;
        bool found = false;
        
        for (uint256 i = 0; i < playerCrew.length(); i++) {
            uint256 existingCrewId = playerCrew.at(i);
            if (playerCrewId[existingCrewId].contractCollection == contractCollection) {
                crewId = existingCrewId;
                found = true;
                break;
            }
        }
        
        if (!found) {
            revert Errors.CrewNotFound();
        }
        
        Crew memory crewData = playerCrewId[crewId];
        Ship storage ship = ownerToShip[msg.sender];

        // Calculate the actual syncrate that was applied (including captain bonus)
        uint256 actualSyncRate = crewData.syncRate;
        if (crewData.x == 0 && crewData.y == 0) {
            actualSyncRate = crewData.syncRate * 2;
        }

        // decrease ship crew
        ship.currCrew--;

        playerCrewOwned[msg.sender].remove(crewId);
        delete playerCrewId[crewId];
        playerCrewOccupiedCoords[msg.sender][crewData.x][crewData.y] = false;

        emit Events.CrewUnassigned(msg.sender, crewIndex, universalCrewId, crewData.x, crewData.y, crewData.contractCollection, crewData.tokenId, crewData.crewType == CrewType.NFT ? "NFT" : "Fungible");

        _decreaseSyncrate(msg.sender, actualSyncRate);
        _decreaseFluxrate(msg.sender, crewData.fluxRate);
    }

    /**
     * END OF CREW FUNCTIONS
     */

    /// RELICS FUNCTIONS


    /**
     * @dev Purchase new Relics using nethereum.
     */
    function buyRelic(uint256 relicIndex, uint256 x, uint256 y) external whenNotPaused {
        Hangar storage hangar = ownerToHangar[msg.sender];

        if (_isInvalidCoordinatesHangarRelics(x, y, hangar.x, hangar.y)) {
            revert Errors.InvalidRelicCoordinates();
        }

        if (!relics[relicIndex].inProduction) {
            revert Errors.RelicNotInProduction();
        }

        if (INethereum(nethereum).balanceOf(msg.sender) < relics[relicIndex].cost) {
            revert Errors.NoCasho();
        }

        if (hangar.currRelics + 1 > hangar.maxRelics) {
            revert Errors.HangarFullofRelics();
        }

        // Check maxPerPlayer limit (NEW)
        uint256 ownedOfThisType;
        EnumerableSetLib.Uint256Set storage owned = playerRelicsOwned[msg.sender];

        for (uint256 i = 0; i < owned.length(); ++i) {
            uint256 ownedRelicId = owned.at(i);
            if (playerRelicsId[ownedRelicId].relicIndex == relicIndex) {
                ++ownedOfThisType;
            }
        }

        if (ownedOfThisType >= relics[relicIndex].maxPerPlayer) {
            revert Errors.RelicMaxReached();
        }

        // Transfer & burn
        INethereum(nethereum).transferFrom(msg.sender, address(this), relics[relicIndex].cost);
        INethereum(nethereum).burn(FixedPointMathLib.mulWad(relics[relicIndex].cost, burnPct));

        uint256 relicId = ++universalRelicId;
        Relic memory base = relics[relicIndex];

        Relic memory relic = Relic(
            relicId,
            base.name,
            x,
            y,
            relicIndex,
            base.fluxRate,
            base.syncRate,
            base.cost,
            base.inProduction,
            RelicSource.Bought,
            base.claimable,
            base.size,
            base.claimToken,
            base.claimTokenIsERC721,
            base.supply,
            base.claimedCount,
            base.maxPerPlayer        // ← NEW: maxPerPlayer
        );

        playerRelicsOccupiedCoords[msg.sender][x][y] = true;
        playerRelicsOwned[msg.sender].add(relicId);
        playerRelicsId[relicId] = relic;

        hangar.currRelics++;

        relics[relicIndex].supply--;

        emit Events.RelicBought(msg.sender, relicIndex, relic.cost, relicId, x, y, base.size);

        _increaseFluxrate(msg.sender, relic.fluxRate);
        _increaseSyncrate(msg.sender, relic.syncRate); 
    }


   function claimRelic(uint256 relicIndex, uint256 x, uint256 y) external whenNotPaused {
        // Check if relic exists
        if (relicIndex == 0 || relicIndex > uniqueRelicCount) {
            revert Errors.NonExistentRelic();
        }

        Relic storage relic = relics[relicIndex];

        // Check if relic is claimable
        if (!relic.claimable) {
            revert Errors.RelicNotClaimable();
        }

        // Check if player already claimed max amount of this specific relic
        if (relicsClaimedCount[msg.sender][relicIndex] >= relic.maxPerPlayer) {
            revert Errors.AlreadyClaimedMaxRelics(); // You'll need to add this error
        }

        // Check supply limits
        if (relic.claimedCount >= relic.supply) {
            revert Errors.RelicSoldOut();
        }

        // Check maxPerPlayer limit (for total owned, including bought ones)
        uint256 ownedOfThisType;
        EnumerableSetLib.Uint256Set storage owned = playerRelicsOwned[msg.sender];

        for (uint256 i = 0; i < owned.length(); ++i) {
            uint256 ownedRelicId = owned.at(i);
            if (playerRelicsId[ownedRelicId].relicIndex == relicIndex) {
                ++ownedOfThisType;
            }
        }

        if (ownedOfThisType >= relic.maxPerPlayer) {
            revert Errors.RelicMaxReached();
        }

        // Check hangar space and coordinates
        Hangar storage hangar = ownerToHangar[msg.sender];
        
        if (_isInvalidCoordinatesHangarRelics(x, y, hangar.x, hangar.y)) {
            revert Errors.InvalidRelicCoordinates();
        }

        if (hangar.currRelics + 1 > hangar.maxRelics) {
            revert Errors.HangarFullofRelics();
        }

        // Check token ownership
        if (relic.claimToken != address(0)) {
            if (relic.claimTokenIsERC721) {
                if (IERC721(relic.claimToken).balanceOf(msg.sender) == 0) {
                    revert Errors.MustOwnNFT();
                }
            } else {
                if (IERC20(relic.claimToken).balanceOf(msg.sender) == 0) {
                    revert Errors.MustOwnFungibleToken();
                }
            }
        }

        // Create new relic instance for player
        uint256 newRelicId = ++universalRelicId;

        Relic memory playerRelic = Relic(
            newRelicId,              // unique id
            relic.name,              // name
            x, y,                    // coordinates (player chosen)
            relicIndex,              // original relic index
            relic.fluxRate,          // fluxRate
            relic.syncRate,          // syncRate
            relic.cost,              // cost
            relic.inProduction,      // inProduction
            RelicSource.Claimed,     // source
            false,                   // claimable - Should be false for instances
            relic.size,              // size
            relic.claimToken,        // claimToken
            relic.claimTokenIsERC721, // claimTokenIsERC721
            relic.supply,            // supply
            0,                       // claimedCount - Not relevant for instances
            relic.maxPerPlayer       // maxPerPlayer
        );

        // Update state
        relicsClaimedCount[msg.sender][relicIndex]++;  // Track how many claimed
        relic.claimedCount++;

        // Place in hangar (not just inventory)
        playerRelicsOccupiedCoords[msg.sender][x][y] = true;
        hangar.currRelics++;
        
        // Add to player's collections
        playerRelicsId[newRelicId] = playerRelic;
        playerRelicsOwned[msg.sender].add(newRelicId);
        playerRelicInventory[msg.sender].push(newRelicId);

        // Give flux bonus
        _increaseFluxrate(msg.sender, relic.fluxRate);
        _increaseSyncrate(msg.sender, relic.syncRate); 

        emit Events.RelicGrantedByToken(msg.sender, newRelicId, relic.claimToken, relic.size);
    }


    /**
     * @dev Sell relics, if there's a secondary market, player will get nethereum in return.
     *
     * Players will sell relics in the case they run out of spots in their hangar to put new relics.
     */
    function sellRelic(uint256 relicId) external whenNotPaused {
        if (!playerRelicsOwned[msg.sender].contains(relicId)) {
            revert Errors.PlayerDoesNotOwnRelic();
        }

        Relic memory relic = playerRelicsId[relicId];

        uint256 secondHandPrice = relicSecondHandMarket[relic.relicIndex];

        if (secondHandPrice > INethereum(nethereum).balanceOf(address(this))) {
            revert Errors.GreatDepression();
        }

        Hangar storage hangar = ownerToHangar[msg.sender];

        hangar.currRelics--;

        playerRelicsOwned[msg.sender].remove(relicId);
        delete playerRelicsId[relicId];
        playerRelicsOccupiedCoords[msg.sender][relic.x][relic.y] = false;

        emit Events.RelicSold(msg.sender, relic.relicIndex, secondHandPrice, relicId, relic.x, relic.y, relic.size);

        _decreaseFluxrate(msg.sender, relic.fluxRate);
        _decreaseSyncrate(msg.sender, relic.syncRate);

        if (secondHandPrice > 0) {
            INethereum(nethereum).transfer(msg.sender, secondHandPrice);
        }
    }


    function sellNode(uint256 nodeIndex, uint256 x, uint256 y) external whenNotPaused {
        // Check coordinates are occupied
        if (!playerNodesOccupiedCoords[msg.sender][x][y]) {
            revert Errors.NoNodeAtCoordinates();
        }
        
        // Find the node instance at these coordinates
        uint256 nodeInstanceId = 0;
        EnumerableSetLib.Uint256Set storage owned = playerNodesOwned[msg.sender];
        
        for (uint256 i = 0; i < owned.length(); ++i) {
            uint256 ownedNodeId = owned.at(i);
            Node memory ownedNode = playerNodesId[ownedNodeId];
            
            if (ownedNode.x == x && ownedNode.y == y && ownedNode.nodeIndex == nodeIndex) {
                nodeInstanceId = ownedNodeId;
                break;
            }
        }
        
        if (nodeInstanceId == 0) {
            revert Errors.NodeNotFoundAtCoordinates();
        }
        
        Node memory node = playerNodesId[nodeInstanceId];
        
        // Use template ID for price lookup (not instance ID)
        uint256 secondHandPrice = nodeSecondHandMarket[nodeIndex];

        if (secondHandPrice > INethereum(nethereum).balanceOf(address(this))) {
            revert Errors.GreatDepression();
        }

        Ship storage ship = ownerToShip[msg.sender];

        // Decrease active node count and arc usage
        ship.currNodes--;
        ship.currArcOutput -= node.arcConsumption;

        // Remove from tracking
        playerNodesOwned[msg.sender].remove(nodeInstanceId);
        delete playerNodesId[nodeInstanceId];
        
        // FIXED: Clear occupied coordinates
        playerNodesOccupiedCoords[msg.sender][x][y] = false;

        // Restore supply to template definition
        nodes[nodeIndex].supply++;

        emit Events.NodeSold(msg.sender, nodeIndex, secondHandPrice, nodeInstanceId, x, y);

        _decreaseFluxrate(msg.sender, node.fluxRate);

        if (secondHandPrice > 0) {
            INethereum(nethereum).transfer(msg.sender, secondHandPrice);
        }
    }



    /**
     * @dev Purchase larger or more relic space for hangar.
     *
     * Players must linearly climb the hangars.
     */
    function buyNewHangar() external whenNotPaused {
        // need to purchase initial hangar first
        if (!initializedStarterHangar[msg.sender]) {
            revert Errors.NeedToInitializeHangar();
        }

        Hangar storage currHangar = ownerToHangar[msg.sender];
        uint256 currHangarIndex = currHangar.hangarIndex;

        if (currHangarIndex == hangarCount) {
            revert Errors.AlreadyAtMaxHangar();
        }

        // 24H cooldown between each hangar upgrade
        if (block.timestamp - lastHangarUpgradeTimestamp[msg.sender] < cooldown) {
            revert Errors.CantBuyNewHangarYet();
        }

        NewHangar memory newHangar = hangars[currHangarIndex + 1];

        if (!newHangar.inProduction) {
            revert Errors.NewHangarNotInProduction();
        }

        if (INethereum(nethereum).balanceOf(msg.sender) < newHangar.cost) {
            revert Errors.NoCasho();
        }

        INethereum(nethereum).transferFrom(msg.sender, address(this), newHangar.cost);

        // burn
        INethereum(nethereum).burn(FixedPointMathLib.mulWad(newHangar.cost, burnPct));

        currHangar.hangarIndex++;
        currHangar.maxRelics = newHangar.maxRelics;
        currHangar.x = newHangar.x;
        currHangar.y = newHangar.y;

        lastHangarUpgradeTimestamp[msg.sender] = block.timestamp;

        emit Events.HangarBought(msg.sender, currHangar.hangarIndex, newHangar.cost);
    }

    /**
     * @dev Purchase larger or more arc output ship.
     *
     * Players must linearly climb the ships.
     */
    function buyNewShip() external whenNotPaused {
        // need to purchase initial ship first
        if (!initializedStarterShip[msg.sender]) {
            revert Errors.NeedToInitializeShip();
        }

        Ship storage currShip = ownerToShip[msg.sender];
        uint256 currShipIndex = currShip.shipIndex;

        if (currShipIndex == shipCount) {
            revert Errors.AlreadyAtMaxShip();
        }

        // 24H cooldown between each ship upgrade
        if (block.timestamp - lastShipUpgradeTimestamp[msg.sender] < cooldown) {
            revert Errors.CantBuyNewShipYet();
        }

        NewShip memory newShip = ships[currShipIndex + 1];

        if (!newShip.inProduction) {
            revert Errors.NewShipNotInProduction();
        }

        if (INethereum(nethereum).balanceOf(msg.sender) < newShip.cost) {
            revert Errors.NoCasho();
        }

        INethereum(nethereum).transferFrom(msg.sender, address(this), newShip.cost);

        // burn
        INethereum(nethereum).burn(FixedPointMathLib.mulWad(newShip.cost, burnPct));

        currShip.shipIndex++;
        currShip.maxNodes = newShip.maxNodes;
        currShip.maxCrew = newShip.maxCrew;
        currShip.totalArcOutput = newShip.totalArcOutput;
        currShip.x = newShip.x;
        currShip.y = newShip.y;

        lastShipUpgradeTimestamp[msg.sender] = block.timestamp;

        emit Events.ShipBought(msg.sender, currShip.shipIndex, newShip.cost);
    }

    /**
     * @dev Claim rewards for player.
     */
    function claimRewards() external whenClaimsNotPaused {
        _registerPlayer(msg.sender);
        _updateRewards(msg.sender);

        uint256 rewards = playerPendingRewards[msg.sender];
        if (rewards == 0) {
            revert Errors.NoRewardsPending();
        }

        // Calculate time-based multiplier
        uint256 timeMultiplier = 1e18; // Default 0% bonus
        
        // Use mining start or last claim timestamp, whichever is more recent
        uint256 referenceTimestamp = lastClaimTimestamp[msg.sender];
        if (referenceTimestamp == 0) {
            referenceTimestamp = playerMiningStart[msg.sender]; // First claim uses mining start
        }
        
        if (referenceTimestamp != 0) {
            uint256 daysSinceReference = (block.timestamp - referenceTimestamp) / 1 days;
            
            if (daysSinceReference >= 16) {
                timeMultiplier = 1.06e18; // 6% bonus for 16+ days
            } else {
                // Linear scale: 0% at day 0, 3% at day 14
                uint256 bonusPercent = (daysSinceReference * 3) / 14;
                if (bonusPercent > 3) bonusPercent = 3; // Cap at 3%
                timeMultiplier = 1e18 + (bonusPercent * 0.01e18);
            }
        }

        // Apply time multiplier to rewards
        rewards = (rewards * timeMultiplier) / 1e18;

        playerPendingRewards[msg.sender] = 0;
        lastClaimTimestamp[msg.sender] = block.timestamp;

        // referral bonus (applied to time-multiplied rewards)
        uint256 referralBonus = FixedPointMathLib.mulWad(rewards, referralFee);
        uint256 finalRewards = rewards - referralBonus;

        INethereum(nethereum).mint(msg.sender, finalRewards);

        address referrer = referrals[msg.sender];
        if (referrer != address(0)) {
            INethereum(nethereum).mint(referrer, referralBonus);
            referralBonusPaid[referrer] += referralBonus;
        } else {
            // else mint referral fee to this contract
            INethereum(nethereum).mint(address(this), referralBonus);
            referralBonusPaid[address(this)] += referralBonus;
        }

        emit Events.RewardsClaimed(msg.sender, rewards);
    }


    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    //       INTERNAL FUNCTIONS
    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    /**
     * @dev Update global cumulative rewards before game state changes.
     */
    function _updateCumulativeRewards() internal {
        if (totalFluxrate == 0) {
            lastRewardBlock = block.number;
            return;
        }

        uint256 currentBlock = lastRewardBlock;

        while (currentBlock < block.number) {
            uint256 nextHalvingBlock = startBlock + ((((currentBlock - startBlock) / HALVING_INTERVAL) + 1) * HALVING_INTERVAL);
            uint256 endBlock = (nextHalvingBlock < block.number) ? nextHalvingBlock : block.number;

            // Calculate emission rate for this segment
            uint256 blocksSinceStart = currentBlock - startBlock;
            uint256 fullHalvings = blocksSinceStart / HALVING_INTERVAL;
            uint256 currentNethereumPerBlock = INITIAL_NETHEREUM_PER_BLOCK / (2 ** fullHalvings);

            // Apply emission rate for this segment
            cumulativeNethereumPerFlux += 
                ((currentNethereumPerBlock * (endBlock - currentBlock) * REWARDS_PRECISION) / totalFluxrate);

            // Move to next segment
            currentBlock = endBlock;
        }

        lastRewardBlock = block.number;
    }


    function _updateRewards(address player) internal {
        // Clean up expired game bonuses first
        _removeExpiredGameBonuses(player);
        
        _updateCumulativeRewards();

        uint256 baseRewards = (playerFluxrate[player] * (cumulativeNethereumPerFlux - playerNethereumDebt[player])) / REWARDS_PRECISION;
        
        // Syncrate as bonus multiplier (syncrate = 3 means 3% bonus)
        uint256 syncMultiplier = 1e18 + (playerSyncrate[player] * 1e16); // 1e16 = 1%
        uint256 finalRewards = (baseRewards * syncMultiplier) / 1e18;
        
        playerPendingRewards[player] += finalRewards;
        playerNethereumDebt[player] = cumulativeNethereumPerFlux;
    }


    /**
     * @dev Increase players fluxrate.
     */
    function _increaseFluxrate(address player, uint256 fluxrate) internal {
        _registerPlayer(player);
        // Only set global mining start once
        if (!miningHasStarted) {
            miningHasStarted = true;
            startBlock = block.number;
            lastRewardBlock = block.number;

            emit Events.MiningStarted(startBlock);
        }

        // Set player's individual mining start timestamp if it's their first time
        if (playerMiningStart[player] == 0) {
            playerMiningStart[player] = block.timestamp;
            emit Events.PlayerMiningStarted(player, playerMiningStart[player]);
        }

        _updateRewards(player);

        totalFluxrate += fluxrate;
        playerFluxrate[player] += fluxrate;

        emit Events.PlayerFluxrateIncreased(msg.sender, playerFluxrate[player], playerPendingRewards[player]);
    }


    /**
     * @dev Decrease players fluxrate.
     */
    function _decreaseFluxrate(address player, uint256 fluxrate) internal {
        // update rewards and global state before modifying players state
        _updateRewards(player);

        totalFluxrate -= fluxrate;
        playerFluxrate[player] -= fluxrate;

        emit Events.PlayerFluxrateDecreased(msg.sender, playerFluxrate[player], playerPendingRewards[player]);
    }



    function _increaseSyncrate(address player, uint256 syncrate) internal {
        _updateRewards(player);

        totalSyncrate += syncrate;
        playerSyncrate[player] += syncrate;

        emit Events.PlayerSyncrateIncreased(msg.sender, playerSyncrate[player], playerPendingRewards[player]);
    }

    function _decreaseSyncrate(address player, uint256 syncrate) internal {
        // update rewards and global state before modifying players state
        _updateRewards(player);

        totalSyncrate -= syncrate;
        playerSyncrate[player] -= syncrate;

        emit Events.PlayerSyncrateDecreased(msg.sender, playerSyncrate[player], playerPendingRewards[player]);
    }


    /**
     * @dev checks the nodes x,y coords are within bounds and there isn't an existent node at that position.
     */
    function _isInvalidCoordinatesShipNodes(uint256 desiredX, uint256 desiredY, uint256 shipX, uint256 shipY)
        internal
        view
        returns (bool)
    {
        if (desiredX >= shipX || desiredY >= shipY) {
            return true;
        }

        return playerNodesOccupiedCoords[msg.sender][desiredX][desiredY];
    }

    /**
     * @dev checks the crew x,y coords are within bounds and there isn't an existent crew at that position.
     */
    function _isInvalidCoordinatesShipCrew(uint256 desiredX, uint256 desiredY, uint256 shipX, uint256 shipY)
        internal
        view
        returns (bool)
    {
        if (desiredX >= shipX || desiredY >= shipY) {
            return true;
        }

        return playerCrewOccupiedCoords[msg.sender][desiredX][desiredY];
    }


    /**
     * @dev checks the relics x,y coords are within bounds and there isn't an existent relic at that position.
     */
    function _isInvalidCoordinatesHangarRelics(uint256 desiredX, uint256 desiredY, uint256 hangarX, uint256 hangarY)
        internal
        view
        returns (bool)
    {
        if (desiredX >= hangarX || desiredY >= hangarY) {
            return true;
        }

        return playerRelicsOccupiedCoords[msg.sender][desiredX][desiredY];
    }

        using ECDSA for bytes32;

        function verifyOwnershipSignature(
            address signer,
            uint256 tokenId,
            address tokenContract,
            string memory chainName,
            bytes calldata signature
        ) public pure returns (bool) {
            bytes32 messageHash = keccak256(abi.encode(signer, tokenId, tokenContract, chainName));
            bytes32 ethSignedMessageHash = messageHash.toEthSignedMessageHash();
            return ethSignedMessageHash.recover(signature) == signer;
        }



    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    //         VIEW FUNCTIONS
    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    /**
     * @dev Get the current mining emission rate based on halvings
     */
        function getNethereumPerBlock() public view returns (uint256) {
            if (!miningHasStarted) {
                return 0;
            }

            uint256 blocksSinceStart = block.number - startBlock;
            uint256 fullHalvings = blocksSinceStart / HALVING_INTERVAL;
            
            return INITIAL_NETHEREUM_PER_BLOCK / (2 ** fullHalvings);
        }

    function getPlayerGameBonus(address player) external view returns (
        uint256 syncrate,
        uint256 fluxrate, 
        uint256 expiry,
        bool isActive
    ) {
        return (
            playerGameSyncrate[player],
            playerGameFluxrate[player], 
            playerGameExpiry[player],
            playerGameExpiry[player] > block.timestamp
        );
    }

    /**
     * @dev Get current pending rewards for player.
     */
    function pendingRewards(address player) external view returns (uint256) {
        if (!miningHasStarted) {
            return 0;
        }

        if (totalFluxrate == 0) {
            return (playerPendingRewards[player] * (1e18 - referralFee)) / REWARDS_PRECISION;
        }

        uint256 currentBlock = lastRewardBlock;
        uint256 simulatedCumulativeNethereumPerFlux = cumulativeNethereumPerFlux;

        while (currentBlock < block.number) {
            // Calculate halvings for current block segment
            uint256 currentHalvingEra = (currentBlock - startBlock) / HALVING_INTERVAL;
            uint256 nextHalvingBlock = startBlock + ((currentHalvingEra + 1) * HALVING_INTERVAL);
            uint256 endBlock = nextHalvingBlock > block.number ? block.number : nextHalvingBlock;

            // Calculate reward for this halving era
            uint256 rewardPerBlock = INITIAL_NETHEREUM_PER_BLOCK / (2 ** currentHalvingEra);

            if (totalFluxrate > 0) {
                simulatedCumulativeNethereumPerFlux +=
                    (rewardPerBlock * (endBlock - currentBlock) * REWARDS_PRECISION) / totalFluxrate;
            }

            currentBlock = endBlock;
        }

        uint256 fluxDelta = playerFluxrate[player] * (simulatedCumulativeNethereumPerFlux - playerNethereumDebt[player]);
        uint256 totalRewards = playerPendingRewards[player] + (fluxDelta / REWARDS_PRECISION);
        return (totalRewards * (1e18 - referralFee)) / REWARDS_PRECISION;
    }


    /**
     * @dev Get current nethereum a player mines per block.
     */
    function playerNethereumPerBlock(address player) external view returns (uint256) {
        if (totalFluxrate == 0) {
            return 0; // Prevent division by zero
        }

        // Calculate current halving era
        uint256 currentHalvingEra = (block.number - startBlock) / HALVING_INTERVAL;
        uint256 currNethereumPerBlock = INITIAL_NETHEREUM_PER_BLOCK / (2 ** currentHalvingEra);

        return FixedPointMathLib.mulDiv(playerFluxrate[player], currNethereumPerBlock, totalFluxrate);
    }

    /**
     * @dev Get blocks till next halvening.
     */
    function blocksUntilNextHalving() external view returns (uint256) {
        if (startBlock == 0) revert Errors.MiningHasntStarted();

        uint256 nextHalvingBlock =
            (startBlock % HALVING_INTERVAL) + ((block.number / HALVING_INTERVAL) + 1) * HALVING_INTERVAL;

        return nextHalvingBlock - block.number;
    }

    /**
     * @dev Get next available hangar upgrade time.
     */
    function timeUntilNextHangarUpgrade(address player) external view returns (uint256) {
        if (lastHangarUpgradeTimestamp[player] + cooldown < block.timestamp) {
            return 0;
        }

        return (lastHangarUpgradeTimestamp[player] + cooldown) - block.timestamp;
    }

    /**
     * @dev Get next available ship upgrade time.
     */
    function timeUntilNextShipUpgrade(address player) external view returns (uint256) {
        if (lastShipUpgradeTimestamp[player] + cooldown < block.timestamp) {
            return 0;
        }

        return (lastShipUpgradeTimestamp[player] + cooldown) - block.timestamp;
    }


    /**
     * @dev Get all nodes for a player.
     */
    function getPlayerNodesPaginated(address player, uint256 startIndex, uint256 size)
        external
        view
        returns (Node[] memory)
    {
        EnumerableSetLib.Uint256Set storage set = playerNodesOwned[player];
        uint256 length = set.length();

        if (startIndex >= length) {
            return new Node[](0);
        }

        uint256 remaining = length - startIndex;
        uint256 returnSize = size > remaining ? remaining : size;

        Node[] memory playerNodes = new Node[](returnSize);
        for (uint256 i = 0; i < returnSize; i++) {
            uint256 instanceId = set.at(startIndex + i);
            playerNodes[i] = playerNodesId[instanceId];
            
            // FIXED: Ensure the instance ID is correctly set
            playerNodes[i].id = instanceId;
        }

        return playerNodes;
    }

    /**
     * @dev Get all relics for a player.
     */
    function getPlayerRelicsPaginated(address player, uint256 startIndex, uint256 size)
        external
        view
        returns (Relic[] memory)
    {
        EnumerableSetLib.Uint256Set storage set = playerRelicsOwned[player];
        uint256 length = set.length();

        // Return empty array if start index is beyond array bounds
        if (startIndex >= length) {
            return new Relic[](0);
        }

        // Calculate how many items we can actually return
        uint256 remaining = length - startIndex;
        uint256 returnSize = size > remaining ? remaining : size;

        Relic[] memory playerRelics = new Relic[](returnSize);
        for (uint256 i = 0; i < returnSize; i++) {
            playerRelics[i] = playerRelicsId[set.at(startIndex + i)];
        }

        return playerRelics;
    }

    /**
     * @dev Get all crew for a player.
     */
    function getPlayerCrewPaginated(address player, uint256 startIndex, uint256 size)
        external
        view
        returns (Crew[] memory)
    {
        EnumerableSetLib.Uint256Set storage set = playerCrewOwned[player];
        uint256 length = set.length();

        // Return empty array if start index is beyond array bounds
        if (startIndex >= length) {
            return new Crew[](0);
        }

        // Calculate how many items we can actually return
        uint256 remaining = length - startIndex;
        uint256 returnSize = size > remaining ? remaining : size;

        Crew[] memory playerCrew = new Crew[](returnSize);
        for (uint256 i = 0; i < returnSize; i++) {
            playerCrew[i] = playerCrewId[set.at(startIndex + i)];
        }

        return playerCrew;
    }

    /**
     * @dev Get all referred users.
     */
    function getReferrals(address referrer) external view returns (address[] memory) {
        return referredUsers[referrer];
    }

    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    //        OWNER FUNCTIONS
    // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    /**
     * @dev Add new node to game.
     */
    function addNode(
        string calldata name,
        uint256 fluxRate,
        uint256 arcConsumption,
        uint256 costInTokens,        // ← Auto-convert
        bool inProduction,
        uint256 supply,
        uint256 maxPerPlayer
    ) external onlyOwner {
        ++uniqueNodeCount;

        nodes[uniqueNodeCount] = Node({
            id: uniqueNodeCount,
            name: name,
            x: 0,
            y: 0,
            fluxRate: fluxRate,
            arcConsumption: arcConsumption,
            cost: costInTokens * 1e18,  // ← Auto-convert
            inProduction: inProduction,
            supply: supply,
            maxPerPlayer: maxPerPlayer,
            nodeIndex: uniqueNodeCount
        });

        emit Events.NewNodeAdded(
            uniqueNodeCount, name, fluxRate, arcConsumption, 
            costInTokens * 1e18, inProduction, supply, maxPerPlayer, uniqueNodeCount
        );
    }

    function addRelic(
        string calldata name,
        uint256 fluxrate,
        uint256 syncrate,
        uint256 costInTokens,        // ← Auto-convert
        bool inProduction,
        bool claimable,
        uint256 size,
        address claimToken,
        bool claimTokenIsERC721,
        uint256 supply,
        uint256 maxPerPlayer
    ) external onlyOwner {
        ++uniqueRelicCount;

        relics[uniqueRelicCount] = Relic(
            uniqueRelicCount, name, 0, 0, uniqueRelicCount, fluxrate, syncrate,
            costInTokens * 1e18,        // ← Auto-convert
            inProduction, RelicSource.Unknown, claimable, size,
            claimToken, claimTokenIsERC721, supply, 0, maxPerPlayer
        );

        emit Events.NewRelicAdded(
            uniqueRelicCount, name, fluxrate, syncrate, costInTokens * 1e18, 
            inProduction, claimable, size
        );
    }

    function _removeExpiredGameBonuses(address player) internal {
        if (playerGameExpiry[player] > 0 && block.timestamp >= playerGameExpiry[player]) {
            uint256 syncRateToRemove = playerGameSyncrate[player];
            uint256 fluxRateToRemove = playerGameFluxrate[player];
            
            // Remove expired bonuses
            if (syncRateToRemove > 0) {
                _decreaseSyncrate(player, syncRateToRemove);
            }
            if (fluxRateToRemove > 0) {
                _decreaseFluxrate(player, fluxRateToRemove);
            }
            
            // Clear storage
            playerGameSyncrate[player] = 0;
            playerGameFluxrate[player] = 0;
            playerGameExpiry[player] = 0;
            
            emit Events.PlayerGameBonusExpired(player, syncRateToRemove, fluxRateToRemove);
        }
    }



    function addGame(uint256 syncRate, uint256 fluxRate, bool active) external onlyOwner {
        ++uniqueGameCount;
        games[uniqueGameCount] = Game({
            gameIndex: uniqueGameCount,            
            syncRate: syncRate,
            fluxRate: fluxRate,
            active: active
        });

        // Fixed event emission to match new function signature
        emit Events.NewGameAdded(uniqueGameCount, syncRate, fluxRate, active);
    }

    function playGame(uint256 gameIndex) external whenNotPaused {
        address player = msg.sender;
        
        // Validate game exists
        if (gameIndex == 0 || gameIndex > uniqueGameCount) {
            revert Errors.CantPlayGameYet();
        }
        
        Game memory game = games[gameIndex];
        
        // Check if game is active
        if (!game.active) {
            revert Errors.GameNotActive();
        }

        // Check cooldown
        if (block.timestamp - lastGamePlayTimestamp[player] < gameCooldown) {
            revert Errors.CantPlayGameYet();
        }

        // Clean up any expired bonuses first
        _removeExpiredGameBonuses(player);
        
        _updateRewards(player);

        // Remove existing game bonuses if still active
        if (playerGameExpiry[player] > block.timestamp) {
            _decreaseSyncrate(player, playerGameSyncrate[player]);
            _decreaseFluxrate(player, playerGameFluxrate[player]);
        }
        
        // Add new 48-hour game bonuses
        playerGameSyncrate[player] = game.syncRate;
        playerGameFluxrate[player] = game.fluxRate;
        playerGameExpiry[player] = block.timestamp + 48 hours;
        
        _increaseSyncrate(player, game.syncRate);
        _increaseFluxrate(player, game.fluxRate);

        lastGamePlayTimestamp[player] = block.timestamp;
        
        emit Events.PlayerGameRewardsActive(player, playerFluxrate[player], playerSyncrate[player], playerPendingRewards[player]);
    }
    

    function setRequireCrewSignature(bool _require) external onlyOwner {
        requireCrewSignature = _require;
    }

    /**
     * @dev Add new ship to game.
     */
    function addShip(
        string memory name,
        uint256 maxNodes,
        uint256 maxCrew,
        uint256 totalArcOutput,
        uint256 costInTokens,        // ← Auto-convert
        bool inProduction,
        uint256 x,
        uint256 y
    ) external onlyOwner {
        if (x * y != maxNodes) {
            revert Errors.ShipDimensionsInvalid();
        }

        if (ships[shipCount].x > x || ships[shipCount].y > y) {
            revert Errors.ShipDimensionsInvalid();
        }

        if (ships[shipCount].totalArcOutput > totalArcOutput) {
            revert Errors.InvalidArcOutput();
        }

        ships[++shipCount] = NewShip(
            name, maxNodes, maxCrew, totalArcOutput, 
            costInTokens * 1e18,        // ← Auto-convert
            inProduction, x, y
        );

        emit Events.NewShipAdded(
            shipCount, name, maxNodes, maxCrew, totalArcOutput, 
            costInTokens * 1e18, inProduction, x, y
        );
    }

    function addHangar(
        string calldata name,
        uint256 maxRelics,
        uint256 costInTokens,        // ← Auto-convert
        bool inProduction,
        uint256 x,
        uint256 y
    ) external onlyOwner {
        if (x * y != maxRelics) {
            revert Errors.HangarDimensionsInvalid();
        }

        if (hangars[hangarCount].x > x || hangars[hangarCount].y > y) {
            revert Errors.HangarDimensionsInvalid();
        }

        hangars[++hangarCount] = NewHangar({
            name: name,
            maxRelics: maxRelics,
            cost: costInTokens * 1e18,  // ← Auto-convert
            inProduction: inProduction,
            x: x,
            y: y
        });

        emit Events.NewHangarAdded(
            hangarCount, name, maxRelics, costInTokens * 1e18, 
            inProduction, x, y
        );
    }



    /**
     * @dev Allows or prevents node from being purchased.
     *
     * Nodes cannot be removed, only toggled off from purchased.
     */
    function toggleNodeProduction(uint256 nodeIndex, bool inProduction) external onlyOwner {
        if (nodeIndex < STARTER_NODE_INDEX || nodeIndex > uniqueNodeCount) {
            revert Errors.InvalidNodeIndex();
        }
        Node storage node = nodes[nodeIndex];
        node.inProduction = inProduction;

        emit Events.NodeProductionToggled(nodeIndex, inProduction);
    }

    /**
     * @dev Allows or prevents node from being purchased.
     *
     * Nodes cannot be removed, only toggled off from purchased.
     */
    function toggleRelicProduction(uint256 relicIndex, bool inProduction) external onlyOwner {
        if (relicIndex < STARTER_RELIC_INDEX || relicIndex > uniqueRelicCount) {
            revert Errors.InvalidRelicIndex();
        }
        Relic storage relic = relics[relicIndex];
        relic.inProduction = inProduction;

        emit Events.RelicProductionToggled(relicIndex, inProduction);
    }

    function toggleGameActive(uint256 gameIndex, bool active) external onlyOwner {
        if (gameIndex == 0 || gameIndex > uniqueGameCount) {
            revert Errors.InvalidGameIndex();
        }
        
        games[gameIndex].active = active;
        
        emit Events.GameStatusChanged(gameIndex, active);
    }


    /**
     * @dev Allows or prevents new ship from being purchased.
     *
     * New ships cannot be removed, only toggled off from purchased.
     */
    function toggleShipProduction(uint256 shipIndex, bool inProduction) external onlyOwner {
        if (shipIndex < STARTER_SHIP_INDEX || shipIndex > shipCount) {
            revert Errors.InvalidShipIndex();
        }

        NewShip storage ship = ships[shipIndex];
        ship.inProduction = inProduction;

        emit Events.ShipProductionToggled(shipIndex, inProduction);
    }

    /**
     * @dev Allows or prevents new hangar from being purchased.
     *
     * New hangars cannot be removed, only toggled off from purchased.
     */
    function toggleHangarProduction(uint256 hangarIndex, bool inProduction) external onlyOwner {
        if (hangarIndex < STARTER_HANGAR_INDEX || hangarIndex > hangarCount) {
            revert Errors.InvalidHangarIndex();
        }

        NewHangar storage hangar = hangars[hangarIndex];
        hangar.inProduction = inProduction;

        emit Events.HangarProductionToggled(hangarIndex, inProduction);
    }

    function toggleTokenVerification(address contractCollection, bool isVerified) external onlyOwner {
        if (tokens[contractCollection].contractCollection == address(0)) {
            revert Errors.TokenDoesNotExist();
        }

        tokens[contractCollection].isVerified = isVerified;

        emit Events.TokenVerificationToggled(contractCollection, isVerified);
    }

    /**
     * @dev Add secondary market for a node.
     */
    function addSecondaryMarketForNode(uint256 nodeIndex, uint256 price) external onlyOwner {
        nodeSecondHandMarket[nodeIndex] = price;

        emit Events.NodeSecondaryMarketAdded(nodeIndex, price);
    }

    function addSecondaryMarketForRelic(uint256 relicIndex, uint256 price) external onlyOwner {
        relicSecondHandMarket[relicIndex] = price;

        emit Events.RelicSecondaryMarketAdded(relicIndex, price);
    }

    function setNethereum(address _nethereum) external onlyOwner {
        nethereum = _nethereum;
    }

    function setVitalekh(address _vitalekh) external onlyOwner {
        vitalekh = _vitalekh;
    }
// PENDING
    function setInitialHangarPrice(uint256 _initialPrice) external onlyOwner {
        initialHangarPrice = _initialPrice;
    }
// PENDING

    function setReferralFee(uint256 fee) external onlyOwner {
        if (fee > 1e18) revert Errors.InvalidFee();

        referralFee = fee;
    }

    function setBurnPct(uint256 burn) external onlyOwner {
        if (burn > 1e18) revert Errors.InvalidFee();

        burnPct = burn;
    }

    function setCooldown(uint256 _cooldown) external onlyOwner {
        cooldown = _cooldown;
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        (bool success,) = payable(vitalekh).call{value: balance}("");

        if (!success) revert Errors.WithdrawFailed();
    }

    function withdrawNethereum(uint256 amt) external onlyOwner {
        INethereum(nethereum).transfer(vitalekh, amt);
    }

    function changeNodeCost(uint256 nodeIndex, uint256 newCostInTokens) external onlyOwner {
        if (nodeIndex > uniqueNodeCount) {
            revert Errors.NonExistentNode();
        }

        if (nodeIndex == STARTER_NODE_INDEX) {
            revert Errors.CantModifyStarterNode();
        }

        Node storage node = nodes[nodeIndex];
        node.cost = newCostInTokens * 1e18;  // ← Auto-convert

        emit Events.NodeCostChanged(nodeIndex, newCostInTokens * 1e18);
    }

    function changeRelicCost(uint256 relicIndex, uint256 newCostInTokens) external onlyOwner {
        if (relicIndex > uniqueRelicCount) {
            revert Errors.NonExistentRelic();
        }

        if (relicIndex == STARTER_RELIC_INDEX) {
            revert Errors.CantModifyStarterRelic();
        }

        Relic storage relic = relics[relicIndex];
        relic.cost = newCostInTokens * 1e18;  // ← Auto-convert

        emit Events.RelicCostChanged(relicIndex, newCostInTokens * 1e18);
    }


    function changeHangarCost(uint256 hangarIndex, uint256 newCostInTokens) external onlyOwner {
        if (hangarIndex > hangarCount) {
            revert Errors.NonExistentHangar();
        }

        if (hangarIndex == STARTER_HANGAR_INDEX) {
            revert Errors.CantModifyStarterHangar();
        }

        NewHangar storage hangar = hangars[hangarIndex];
        hangar.cost = newCostInTokens * 1e18;  // ← Auto-convert

        emit Events.HangarCostChanged(hangarIndex, newCostInTokens * 1e18);
    }

    function getAllNodes() external view returns (Node[] memory) {
        Node[] memory allNodes = new Node[](uniqueNodeCount);
        for (uint256 i = 1; i <= uniqueNodeCount; i++) {
            allNodes[i-1] = nodes[i];
        }
        return allNodes;
    }

    /**
    * @dev Get all relic templates
    */
    function getAllRelics() external view returns (Relic[] memory) {
        Relic[] memory allRelics = new Relic[](uniqueRelicCount);
        for (uint256 i = 1; i <= uniqueRelicCount; i++) {
            allRelics[i-1] = relics[i];
        }
        return allRelics;
    }

    /**
    * @dev Get nodes in production only
    */
    function getActiveNodes() external view returns (Node[] memory) {
        uint256 count;
        for (uint256 i = 1; i <= uniqueNodeCount; i++) {
            if (nodes[i].inProduction) count++;
        }
        
        Node[] memory activeNodes = new Node[](count);
        uint256 index;
        for (uint256 i = 1; i <= uniqueNodeCount; i++) {
            if (nodes[i].inProduction) {
                activeNodes[index++] = nodes[i];
            }
        }
        return activeNodes;
    }

    /**
    * @dev Get relics in production only
    */
    function getActiveRelics() external view returns (Relic[] memory) {
        uint256 count;
        for (uint256 i = 1; i <= uniqueRelicCount; i++) {
            if (relics[i].inProduction) count++;
        }
        
        Relic[] memory activeRelics = new Relic[](count);
        uint256 index;
        for (uint256 i = 1; i <= uniqueRelicCount; i++) {
            if (relics[i].inProduction) {
                activeRelics[index++] = relics[i];
            }
        }
        return activeRelics;
    }

    function batchInitialize(
        NodeInit[] calldata nodesToAdd,
        RelicInit[] calldata relicsToAdd
    ) external onlyOwner {
        // Batch add nodes
        _batchAddNodes(nodesToAdd);
        
        // Batch add relics
        _batchAddRelics(relicsToAdd);
    }

    function _batchAddNodes(NodeInit[] calldata nodesToAdd) private {
        for (uint256 i = 0; i < nodesToAdd.length; i++) {
            nodes[++uniqueNodeCount] = Node({
                nodeIndex: uniqueNodeCount,
                name: nodesToAdd[i].name,
                id: 0, // This will be set when instances are created
                x: 0,  // Template nodes don't have coordinates
                y: 0,
                fluxRate: nodesToAdd[i].fluxRate,
                arcConsumption: nodesToAdd[i].arcConsumption,
                cost: nodesToAdd[i].cost,
                inProduction: nodesToAdd[i].inProduction,
                supply: nodesToAdd[i].supply,
                maxPerPlayer: nodesToAdd[i].maxPerPlayer
            });
            
            emit Events.NewNodeAdded(
                uniqueNodeCount,
                nodesToAdd[i].name,
                nodesToAdd[i].fluxRate,
                nodesToAdd[i].arcConsumption,
                nodesToAdd[i].cost,
                nodesToAdd[i].inProduction,
                nodesToAdd[i].supply,
                nodesToAdd[i].maxPerPlayer,
                uniqueNodeCount
            );
        }
    }

    function _batchAddRelics(RelicInit[] calldata relicsToAdd) private {
        for (uint256 i = 0; i < relicsToAdd.length; i++) {
            relics[++uniqueRelicCount] = Relic({
                id: uniqueRelicCount,
                name: relicsToAdd[i].name,
                x: 0,  // Template relics don't have coordinates
                y: 0,
                relicIndex: uniqueRelicCount,
                fluxRate: relicsToAdd[i].fluxRate,
                syncRate: relicsToAdd[i].syncRate,
                cost: relicsToAdd[i].cost,
                inProduction: relicsToAdd[i].inProduction,
                source: RelicSource.Unknown,
                claimable: relicsToAdd[i].claimable,
                size: relicsToAdd[i].size,
                claimToken: relicsToAdd[i].claimToken,
                claimTokenIsERC721: relicsToAdd[i].claimTokenIsERC721,
                supply: relicsToAdd[i].supply,
                claimedCount: 0,
                maxPerPlayer: relicsToAdd[i].maxPerPlayer
            });
            
            emit Events.NewRelicAdded(
                uniqueRelicCount,
                relicsToAdd[i].name,
                relicsToAdd[i].fluxRate,
                relicsToAdd[i].syncRate,
                relicsToAdd[i].cost,
                relicsToAdd[i].inProduction,
                relicsToAdd[i].claimable,
                relicsToAdd[i].size
            );
        }
    }

    function _batchAddShips(ShipInit[] calldata shipsToAdd) private {
        for (uint256 i = 0; i < shipsToAdd.length; i++) {
            // Validate ship dimensions
            require(
                shipsToAdd[i].x * shipsToAdd[i].y == shipsToAdd[i].maxNodes,
                "Ship dimensions invalid"
            );
            
            // Ensure new ships are progressive upgrades
            if (shipCount > 0) {
                require(
                    ships[shipCount].x <= shipsToAdd[i].x && 
                    ships[shipCount].y <= shipsToAdd[i].y,
                    "Ship dimensions must be progressive"
                );
                require(
                    ships[shipCount].totalArcOutput <= shipsToAdd[i].totalArcOutput,
                    "Arc output must be progressive"
                );
            }
            
            ships[++shipCount] = NewShip({
                name: shipsToAdd[i].name,
                maxNodes: shipsToAdd[i].maxNodes,
                maxCrew: shipsToAdd[i].maxCrew,
                totalArcOutput: shipsToAdd[i].totalArcOutput,
                cost: shipsToAdd[i].cost,
                inProduction: shipsToAdd[i].inProduction,
                x: shipsToAdd[i].x,
                y: shipsToAdd[i].y
            });
            
            emit Events.NewShipAdded(
                shipCount,
                shipsToAdd[i].name,
                shipsToAdd[i].maxNodes,
                shipsToAdd[i].maxCrew,
                shipsToAdd[i].totalArcOutput,
                shipsToAdd[i].cost,
                shipsToAdd[i].inProduction,
                shipsToAdd[i].x,
                shipsToAdd[i].y
            );
        }
    }

    function _batchAddHangars(HangarInit[] calldata hangarsToAdd) private {
        for (uint256 i = 0; i < hangarsToAdd.length; i++) {
            // Validate hangar dimensions
            require(
                hangarsToAdd[i].x * hangarsToAdd[i].y == hangarsToAdd[i].maxRelics,
                "Hangar dimensions invalid"
            );
            
            // Ensure new hangars are progressive upgrades
            if (hangarCount > 0) {
                require(
                    hangars[hangarCount].x <= hangarsToAdd[i].x && 
                    hangars[hangarCount].y <= hangarsToAdd[i].y,
                    "Hangar dimensions must be progressive"
                );
            }
            
            hangars[++hangarCount] = NewHangar({
                name: hangarsToAdd[i].name,
                maxRelics: hangarsToAdd[i].maxRelics,
                cost: hangarsToAdd[i].cost,
                inProduction: hangarsToAdd[i].inProduction,
                x: hangarsToAdd[i].x,
                y: hangarsToAdd[i].y
            });
            
            emit Events.NewHangarAdded(
                hangarCount,
                hangarsToAdd[i].name,
                hangarsToAdd[i].maxRelics,
                hangarsToAdd[i].cost,
                hangarsToAdd[i].inProduction,
                hangarsToAdd[i].x,
                hangarsToAdd[i].y
            );
        }
    }

    function _batchAddFactions(string[] calldata factionNames) private {
        for (uint256 i = 0; i < factionNames.length; i++) {
            factions[++totalFactions] = Faction({
                id: totalFactions,
                name: factionNames[i],
                factionFluxrate: 0,
                active: true,
                currentMembers: 0
            });
            
            emit Events.FactionAdded(totalFactions, factionNames[i]);
        }
    }

    function _batchAddGames(GameInit[] calldata gamesToAdd) private {
        for (uint256 i = 0; i < gamesToAdd.length; i++) {
            games[++uniqueGameCount] = Game({
                gameIndex: uniqueGameCount,
                syncRate: gamesToAdd[i].syncRate,
                fluxRate: gamesToAdd[i].fluxRate,
                active: gamesToAdd[i].active
            });
            
            emit Events.NewGameAdded(
                uniqueGameCount,
                gamesToAdd[i].syncRate,
                gamesToAdd[i].fluxRate,
                gamesToAdd[i].active
            );
        }
    }

    /**
 * @dev Pause/unpause claims while keeping mining calculations active
 * This allows taking snapshots for migration without stopping rewards accumulation
 */    

    function pauseClaims(bool _paused) external onlyOwner {
        claimsPaused = _paused;
        emit Events.ClaimsPaused(_paused);
    }

    function pauseContract(bool _paused) external onlyOwner {
        contractPaused = _paused;
        emit Events.ContractPaused(_paused);
    }

    /**
    * @dev Get total number of registered players
    */
    function getTotalPlayers() external view returns (uint256) {
        return allPlayers.length;
    }

    /**
    * @dev Get players paginated for export
    */
    function getPlayersPaginated(uint256 startIndex, uint256 count) 
        external view returns (address[] memory) {
        require(startIndex < allPlayers.length, "Start index out of bounds");
        
        uint256 endIndex = startIndex + count;
        if (endIndex > allPlayers.length) {
            endIndex = allPlayers.length;
        }
        
        address[] memory players = new address[](endIndex - startIndex);
        for (uint256 i = startIndex; i < endIndex; i++) {
            players[i - startIndex] = allPlayers[i];
        }
        
        return players;
    }

    
    /**
    * @dev Calculate current pending rewards without updating state
    * Used for accurate export data even when claims are paused
    */
    function _calculateCurrentPendingRewards(address player) internal view returns (uint256) {
        if (!miningHasStarted || totalFluxrate == 0) {
            return playerPendingRewards[player];
        }

        uint256 currentBlock = lastRewardBlock;
        uint256 simulatedCumulativeNethereumPerFlux = cumulativeNethereumPerFlux;

        while (currentBlock < block.number) {
            uint256 currentHalvingEra = (currentBlock - startBlock) / HALVING_INTERVAL;
            uint256 nextHalvingBlock = startBlock + ((currentHalvingEra + 1) * HALVING_INTERVAL);
            uint256 endBlock = nextHalvingBlock > block.number ? block.number : nextHalvingBlock;

            uint256 rewardPerBlock = INITIAL_NETHEREUM_PER_BLOCK / (2 ** currentHalvingEra);

            if (totalFluxrate > 0) {
                simulatedCumulativeNethereumPerFlux +=
                    (rewardPerBlock * (endBlock - currentBlock) * REWARDS_PRECISION) / totalFluxrate;
            }

            currentBlock = endBlock;
        }

        uint256 baseRewards = (playerFluxrate[player] * (simulatedCumulativeNethereumPerFlux - playerNethereumDebt[player])) / REWARDS_PRECISION;
        
        // Apply syncrate bonus
        uint256 effectiveSyncrate = playerSyncrate[player];
        if (playerGameExpiry[player] > block.timestamp) {
            effectiveSyncrate += playerGameSyncrate[player];
        }
        
        uint256 syncMultiplier = 1e18 + (effectiveSyncrate * 1e16);
        uint256 finalRewards = (baseRewards * syncMultiplier) / 1e18;
        
        return playerPendingRewards[player] + finalRewards;
    }

    /**
    * @dev Export multiple players' data in a single call
    * Much more efficient for large-scale migration
    */
    function exportPlayersBatch(address[] calldata players) 
        external view returns (PlayerExportData[] memory) {
        
        PlayerExportData[] memory batchData = new PlayerExportData[](players.length);
        
        for (uint256 i = 0; i < players.length; i++) {
            address player = players[i];
            
            // Calculate current pending rewards
            uint256 currentPending = _calculateCurrentPendingRewards(player);
            
            Hangar memory hangar = ownerToHangar[player];
            Ship memory ship = ownerToShip[player];
            
            batchData[i] = PlayerExportData({
                player: player,
                // Basic mining data
                fluxrate: playerFluxrate[player],
                syncrate: playerSyncrate[player],
                pendingRewards: currentPending,
                nethereumDebt: playerNethereumDebt[player],
                miningStartTime: playerMiningStart[player],
                lastClaimTime: lastClaimTimestamp[player],
                
                // Game data  
                gameFluxrate: playerGameFluxrate[player],
                gameSyncrate: playerGameSyncrate[player],
                gameExpiry: playerGameExpiry[player],
                lastGamePlayTime: lastGamePlayTimestamp[player],
                
                // Faction data
                factionId: playerFaction[player],
                lastFactionChange: lastFactionChange[player],
                
                // Hangar/Ship data
                hasStarterHangar: initializedStarterHangar[player],
                hasStarterShip: initializedStarterShip[player],
                hangarIndex: hangar.hangarIndex,
                shipIndex: ship.shipIndex,
                lastHangarUpgrade: lastHangarUpgradeTimestamp[player],
                lastShipUpgrade: lastShipUpgradeTimestamp[player],
                
                // Starter items
                claimedStarterNode: acquiredStarterNode[player],
                claimedStarterRelic: acquiredStarterRelic[player],
                
                // Referral data
                referrer: referrals[player],
                referralBonusPaid: referralBonusPaid[player]
            });
        }
        
        return batchData;
    }

    /**
    * @dev Export multiple players' assets in a single call
    */
    function exportPlayersAssetsBatch(address[] calldata players) 
        external view returns (PlayerAssetData[] memory) {
        
        PlayerAssetData[] memory batchAssets = new PlayerAssetData[](players.length);
        
        for (uint256 i = 0; i < players.length; i++) {
            address player = players[i];
            
            // FIXED: Use different variable names to avoid conflicts
            EnumerableSetLib.Uint256Set storage playerNodes = playerNodesOwned[player];
            EnumerableSetLib.Uint256Set storage playerRelics = playerRelicsOwned[player];
            EnumerableSetLib.Uint256Set storage playerCrew = playerCrewOwned[player];
            
            uint256 nodeCount = playerNodes.length();
            uint256 relicCount = playerRelics.length();
            uint256 crewCount = playerCrew.length();
            
            uint256[] memory nodeIds = new uint256[](nodeCount);
            uint256[] memory relicIds = new uint256[](relicCount);
            uint256[] memory crewIds = new uint256[](crewCount);
            
            for (uint256 j = 0; j < nodeCount; j++) {
                nodeIds[j] = playerNodes.at(j);
            }
            
            for (uint256 j = 0; j < relicCount; j++) {
                relicIds[j] = playerRelics.at(j);
            }
            
            for (uint256 j = 0; j < crewCount; j++) {
                crewIds[j] = playerCrew.at(j);
            }
            
            batchAssets[i] = PlayerAssetData({
                player: player,
                nodeIds: nodeIds,
                relicIds: relicIds,
                crewIds: crewIds
            });
        }
        
        return batchAssets;
    }

    /**
    * @dev Export all asset details for given IDs (optimized for batch processing)
    */
    function exportAssetDetailsBatch(
        uint256[] calldata nodeIds,
        uint256[] calldata relicIds,
        uint256[] calldata crewIds
    ) external view returns (
        Node[] memory exportedNodes,
        Relic[] memory exportedRelics,
        Crew[] memory exportedCrews
    ) {
        exportedNodes = new Node[](nodeIds.length);
        exportedRelics = new Relic[](relicIds.length);
        exportedCrews = new Crew[](crewIds.length);
        
        for (uint256 i = 0; i < nodeIds.length; i++) {
            exportedNodes[i] = playerNodesId[nodeIds[i]];
        }
        
        for (uint256 i = 0; i < relicIds.length; i++) {
            exportedRelics[i] = playerRelicsId[relicIds[i]];
        }
        
        for (uint256 i = 0; i < crewIds.length; i++) {
            exportedCrews[i] = playerCrewId[crewIds[i]];
        }
        
        return (exportedNodes, exportedRelics, exportedCrews);
    }


    /**
    * @dev Get all players in specified range (much more efficient than individual calls)
    */
    function exportPlayersRange(uint256 startIndex, uint256 endIndex) 
        external view returns (address[] memory) {
        
        require(startIndex < allPlayers.length, "Start index out of bounds");
        require(endIndex <= allPlayers.length, "End index out of bounds");
        require(startIndex < endIndex, "Invalid range");
        
        uint256 length = endIndex - startIndex;
        address[] memory players = new address[](length);
        
        for (uint256 i = 0; i < length; i++) {
            players[i] = allPlayers[startIndex + i];
        }
        
        return players;
    }


    /**
    * @dev Export complete migration package for a range of players
    * This is the most efficient function for large-scale migration
    */

    function exportMigrationPackage(uint256 startIndex, uint256 batchSize) 
        external view returns (
            address[] memory players,
            PlayerExportData[] memory playerData,
            PlayerAssetData[] memory assetData,
            uint256 totalPlayers,
            bool isLastBatch
        ) {
        
        require(startIndex < allPlayers.length, "Start index out of bounds");
        
        uint256 endIndex = startIndex + batchSize;
        if (endIndex > allPlayers.length) {
            endIndex = allPlayers.length;
        }
        
        // INLINE PLAYER RANGE EXTRACTION - NO FUNCTION CALLS
        uint256 length = endIndex - startIndex;
        players = new address[](length);
        for (uint256 i = 0; i < length; i++) {
            players[i] = allPlayers[startIndex + i];
        }
        
        // INLINE PLAYER DATA EXPORT - DUPLICATED CODE BUT NO DEPENDENCIES
        playerData = new PlayerExportData[](players.length);
        for (uint256 i = 0; i < players.length; i++) {
            address player = players[i];
            
            // INLINE REWARDS CALCULATION
            uint256 currentPending = playerPendingRewards[player];
            
            if (miningHasStarted && totalFluxrate > 0) {
                uint256 currentBlock = lastRewardBlock;
                uint256 simulatedCumulativeNethereumPerFlux = cumulativeNethereumPerFlux;

                while (currentBlock < block.number) {
                    uint256 currentHalvingEra = (currentBlock - startBlock) / HALVING_INTERVAL;
                    uint256 nextHalvingBlock = startBlock + ((currentHalvingEra + 1) * HALVING_INTERVAL);
                    uint256 endBlock = nextHalvingBlock > block.number ? block.number : nextHalvingBlock;

                    uint256 rewardPerBlock = INITIAL_NETHEREUM_PER_BLOCK / (2 ** currentHalvingEra);

                    if (totalFluxrate > 0) {
                        simulatedCumulativeNethereumPerFlux +=
                            (rewardPerBlock * (endBlock - currentBlock) * REWARDS_PRECISION) / totalFluxrate;
                    }

                    currentBlock = endBlock;
                }

                uint256 baseRewards = (playerFluxrate[player] * (simulatedCumulativeNethereumPerFlux - playerNethereumDebt[player])) / REWARDS_PRECISION;
                
                uint256 effectiveSyncrate = playerSyncrate[player];
                if (playerGameExpiry[player] > block.timestamp) {
                    effectiveSyncrate += playerGameSyncrate[player];
                }
                
                uint256 syncMultiplier = 1e18 + (effectiveSyncrate * 1e16);
                uint256 finalRewards = (baseRewards * syncMultiplier) / 1e18;
                
                currentPending = playerPendingRewards[player] + finalRewards;
            }
            
            Hangar memory hangar = ownerToHangar[player];
            Ship memory ship = ownerToShip[player];
            
            playerData[i] = PlayerExportData({
                player: player,
                fluxrate: playerFluxrate[player],
                syncrate: playerSyncrate[player],
                pendingRewards: currentPending,
                nethereumDebt: playerNethereumDebt[player],
                miningStartTime: playerMiningStart[player],
                lastClaimTime: lastClaimTimestamp[player],
                gameFluxrate: playerGameFluxrate[player],
                gameSyncrate: playerGameSyncrate[player],
                gameExpiry: playerGameExpiry[player],
                lastGamePlayTime: lastGamePlayTimestamp[player],
                factionId: playerFaction[player],
                lastFactionChange: lastFactionChange[player],
                hasStarterHangar: initializedStarterHangar[player],
                hasStarterShip: initializedStarterShip[player],
                hangarIndex: hangar.hangarIndex,
                shipIndex: ship.shipIndex,
                lastHangarUpgrade: lastHangarUpgradeTimestamp[player],
                lastShipUpgrade: lastShipUpgradeTimestamp[player],
                claimedStarterNode: acquiredStarterNode[player],
                claimedStarterRelic: acquiredStarterRelic[player],
                referrer: referrals[player],
                referralBonusPaid: referralBonusPaid[player]
            });
        }
        
        // INLINE ASSET DATA EXPORT
        assetData = new PlayerAssetData[](players.length);
        for (uint256 i = 0; i < players.length; i++) {
            address player = players[i];
            
            EnumerableSetLib.Uint256Set storage playerNodes = playerNodesOwned[player];
            EnumerableSetLib.Uint256Set storage playerRelics = playerRelicsOwned[player];
            EnumerableSetLib.Uint256Set storage playerCrew = playerCrewOwned[player];
            
            uint256 nodeCount = playerNodes.length();
            uint256 relicCount = playerRelics.length();
            uint256 crewCount = playerCrew.length();
            
            uint256[] memory nodeIds = new uint256[](nodeCount);
            uint256[] memory relicIds = new uint256[](relicCount);
            uint256[] memory crewIds = new uint256[](crewCount);
            
            for (uint256 j = 0; j < nodeCount; j++) {
                nodeIds[j] = playerNodes.at(j);
            }
            
            for (uint256 j = 0; j < relicCount; j++) {
                relicIds[j] = playerRelics.at(j);
            }
            
            for (uint256 j = 0; j < crewCount; j++) {
                crewIds[j] = playerCrew.at(j);
            }
            
            assetData[i] = PlayerAssetData({
                player: player,
                nodeIds: nodeIds,
                relicIds: relicIds,
                crewIds: crewIds
            });
        }
        
        totalPlayers = allPlayers.length;
        isLastBatch = (endIndex >= allPlayers.length);
        
        return (players, playerData, assetData, totalPlayers, isLastBatch);
    }

    /**
    * @dev Export global contract state for migration
    */
    function exportGlobalState() external view returns (
        uint256 _startBlock,
        uint256 _lastRewardBlock,
        uint256 _totalFluxrate,
        uint256 _totalSyncrate,
        uint256 _cumulativeNethereumPerFlux,
        uint256 _uniqueNodeCount,
        uint256 _uniqueRelicCount,
        uint256 _shipCount,
        uint256 _hangarCount,
        uint256 _totalFactions,
        uint256 _uniqueGameCount,
        bool _miningHasStarted,
        bool _claimsPaused
    ) {
        return (
            startBlock,
            lastRewardBlock,
            totalFluxrate,
            totalSyncrate,
            cumulativeNethereumPerFlux,
            uniqueNodeCount,
            uniqueRelicCount,
            shipCount,
            hangarCount,
            totalFactions,
            uniqueGameCount,
            miningHasStarted,
            claimsPaused
        );
    }
}

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.19;

interface INethereum {
    function mint(address to, uint256 amt) external;

    function burn(uint256 value) external;

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

File 3 of 31 : Relic.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @dev Relics that can be purchased in the game.
 */
import {RelicSource} from "./enum/Enums.sol";

struct Relic {
    uint256 id;
    string name;
    uint256 x;
    uint256 y;
    uint256 relicIndex;
    uint256 fluxRate;
    uint256 syncRate; 
    uint256 cost;
    bool inProduction;
    RelicSource source;
    bool claimable;
    uint256 size;
    address claimToken;
    bool claimTokenIsERC721;
    uint256 supply;
    uint256 claimedCount;
    uint256 maxPerPlayer;     // ← NEW: Max per player (like nodes have)
}

File 4 of 31 : Node.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @dev Nodes that can be purchased in the game.
 */
struct Node {
    uint256 nodeIndex;
    string name;
    uint256 id;
    uint256 x;
    uint256 y;
    uint256 fluxRate;
    uint256 arcConsumption;
    uint256 cost;
    bool inProduction;
    uint256 supply;
    uint256 maxPerPlayer;
}

File 5 of 31 : Crew.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

// At the top of Crew.sol
import {CrewType} from "./enum/Enums.sol";
struct Crew {
    uint256 id;
    string name;
    uint256 x;
    uint256 y;
    uint256 fluxRate;
    uint256 syncRate;
    address contractCollection;
    uint256 tokenId;
    CrewType crewType;
}

File 6 of 31 : Faction.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

struct Faction {
    uint256 id;
    string name;
    uint256 factionFluxrate;
    bool active;
    uint256 currentMembers;
}

File 7 of 31 : Token.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

struct Token {
    address contractCollection;
    string slug;
    bool isVerified;
    string chain;
}

File 8 of 31 : Game.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @dev Miners that can be purchased in the game.
 */
struct Game {
    uint256 gameIndex;
    uint256 syncRate;
    uint256 fluxRate;
    bool active;        
}

File 9 of 31 : Ship.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @dev Current player's ship.
 */
struct Ship {
    uint256 shipIndex;
    uint256 maxNodes;
    uint256 currNodes;
    uint256 maxCrew;
    uint256 currCrew;
    uint256 totalArcOutput;
    uint256 currArcOutput;
    bool inProduction;
    uint256 x;
    uint256 y;
}

File 10 of 31 : Hangar.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @dev Current player's facility.
 */
struct Hangar {
    uint256 hangarIndex;
    uint256 maxRelics;
    uint256 currRelics;
    uint256 currShip;
    uint256 x;
    uint256 y;
}

File 11 of 31 : Events.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

library Events {
    event MiningStarted(uint256 startBlock);

    event NewNodeAdded(
        uint256 indexed nodeIndex, string name, uint256 fluxRate, uint256 arcConsumption, uint256 cost, bool inProduction, uint256 supply, uint256 maxPerPlayer, uint256 uniqueNodeCount
    );

    event NodeProductionToggled(uint256 indexed nodeIndex, bool inProduction);

    event NewRelicAdded(
        uint256 indexed relicIndex, string name, uint256 fluxRate, uint256 syncRate, uint256 cost, bool inProduction, bool claimable, uint256 size
    );

    event NewGameAdded(
        uint256 indexed gameIndex, uint256 id, uint256 x, uint256 y, uint256 syncRate, uint256 fluxRate
    );

    event RelicProductionToggled(uint256 indexed relicIndex, bool inProduction);

    event HangarProductionToggled(uint256 indexed hangarIndex, bool inProduction);

    event NewHangarAdded(
    uint256 indexed hangarIndex,
    string name,
    uint256 maxRelics,
    uint256 cost,
    bool inProduction,
    uint256 x,
    uint256 y
    );

    event ShipProductionToggled(uint256 indexed shipIndex, bool inProduction);

    event NewShipAdded(
    uint256 indexed shipIndex,
    string name,
    uint256 maxNodes,
    uint256 maxCrew,
    uint256 totalArcOutput,
    uint256 cost,
    bool inProduction,
    uint256 x,
    uint256 y
    );

    event ShipBought(address indexed player, uint256 indexed shipIndex, uint256 cost);

    event InitialShipPurchased(address indexed player);

    event InitialHangarPurchased(address indexed player);

    event FreeNodeRedeemed(address indexed player);

    event NodeSold(
        address indexed player,
        uint256 indexed nodeIndex,
        uint256 secondHandPrice,
        uint256 nodeId,
        uint256 x,
        uint256 y
    );

    event RelicSold(
        address indexed player,
        uint256 indexed relicIndex,
        uint256 secondHandPrice,
        uint256 relicId,
        uint256 x,
        uint256 y,
        uint256 size
    );

    event RelicBought(
        address indexed player, uint256 indexed relicIndex, uint256 cost, uint256 relicId, uint256 x, uint256 y, uint256 size
    );

    event NodeBought(
        address indexed player, uint256 indexed nodeIndex, uint256 cost, uint256 nodeId, uint256 x, uint256 y
    );

    event HangarBought(address indexed player, uint256 indexed hangarIndex, uint256 cost);

    event PlayerFluxrateIncreased(address indexed player, uint256 playerFluxrate, uint256 playerPendingRewards);

    event PlayerFluxrateDecreased(address indexed player, uint256 playerFluxrate, uint256 playerPendingRewards);

    event PlayerHashrateDecreased(address indexed player, uint256 playerHashrate, uint256 playerPendingRewards);

    event RewardsClaimed(address indexed player, uint256 rewards);

    event NodeCostChanged(uint256 indexed nodeIndex, uint256 newCost);

    event RelicCostChanged(uint256 indexed relicIndex, uint256 newCost);

    event HangarCostChanged(uint256 indexed hangarIndex, uint256 newCost);

    event ShipCostChanged(uint256 indexed shipIndex, uint256 newCost);

    event NewTokenAdded(address indexed contractCollection, string slug, bool isVerified, string chain);

    event CrewAssigned(address indexed player, uint256 indexed crewId, uint256 cost, uint256 x, uint256 y, address contractCollection, uint256 tokenId, string crewType);

    event CrewUnassigned(address indexed player, uint256 indexed crewId, uint256 nodeIndex, uint256 x, uint256 y, address contractCollection, uint256 tokenId, string crewType);

    event PlayerSyncrateIncreased(address indexed player, uint256 playerSyncrate, uint256 playerPendingRewards);

    event PlayerSyncrateDecreased(address indexed player, uint256 playerSyncrate, uint256 playerPendingRewards);

    event TokenVerificationToggled(address indexed contractCollection, bool isVerified);

    event PlayerMiningStarted(address indexed player, uint256 playerMiningStart);

    event BonusGranted(address indexed player, uint256 bonusAmount, uint256 timeWaited);

    event RelicGrantedByToken(
        address indexed player,
        uint256 relicId,
        address tokenUsed,
        uint256 size
    );

    event NodeSecondaryMarketAdded(uint256 indexed nodeIndex, uint256 price);

    event RelicSecondaryMarketAdded(uint256 indexed relicIndex, uint256 price);

    event PlayerGameRewardsActive(address indexed player, uint256 playerFluxrate, uint256 playerSyncrate, uint256 playerPendingRewards);

    event FactionAdded(uint256 indexed id, string name);
    event PlayerJoinedFaction(address indexed player, uint256 indexed factionId, bool switched);
    event FactionStatusChanged(uint256 indexed factionId, bool isActive);
    event NewGameAdded(
        uint256 indexed gameIndex,
        uint256 syncRate,
        uint256 fluxRate,
        bool active
    );

    event GameStatusChanged(
        uint256 indexed gameIndex,
        bool active
    );

    event PlayerGameBonusExpired(
        address indexed player,
        uint256 syncRateRemoved,
        uint256 fluxRateRemoved
    );

    event TokenModified(address indexed contractCollection, string slug, bool isVerified, string chain);

    event ClaimsPaused(bool paused);
    event ContractPaused(bool paused);
    event PlayerRegistered(address player);

}

File 12 of 31 : NewHangar.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @dev Facilities that can be purchased in game.
 */
struct NewHangar {
    string name;
    uint256 maxRelics;
    uint256 cost;
    bool inProduction;
    uint256 x;
    uint256 y;
}

File 13 of 31 : NewShip.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @dev Current player's ship.
 */
struct NewShip {
    string name;
    uint256 maxNodes;
    uint256 maxCrew;
    uint256 totalArcOutput;
    uint256 cost;
    bool inProduction;
    uint256 x;
    uint256 y;
}

File 14 of 31 : Errors.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

library Errors {
    error IncorrectValue();
    error AlreadyPurchasedInitialHangar();
    error AlreadyPurchasedInitialShip();    
    error StarterNodeAlreadyAcquired();
    error StarterRelicAlreadyAcquired();
    error ShipAtMaxCapacity();
    error ShipInadequateArcOutput();
    error PlayerDoesNotOwnNode();
    error PlayerDoesNotOwnRelic();
    error GreatDepression();
    error NodeNotInProduction();
    error RelicNotInProduction();
    error NoCasho();
    error NewShipNotInProduction();
    error NewHangarNotInProduction();
    error CannotDowngradeAShip();
    error CannotDowngradeAHangar();
    error NoRewardsPending();
    error CannotDecreaseBelowZero();
    error InvalidNodeCoordinates();
    error InvalidCrewCoordinates();
    error InvalidRelicCoordinates();
    error ShipDimensionsInvalid();
    error HangarDimensionsInvalid();
    error NeedToInitializeHangar();
    error NeedToInitializeShip();
    error InvalidReferrer();
    error NonExistentNode();
    error NonExistentRelic();
    error CantModifyStarterNode();
    error NonExistentHangar();
    error CantModifyStarterHangar();
    error NonExistentShip();
    error CantModifyStarterShip();    
    error AlreadyAtMaxHangar();
    error CantBuyNewHangarYet();
    error CantAddNewCrewYet();
    error AlreadyAtMaxShip();
    error CantBuyNewShipYet();    
    error InvalidNodeIndex();
    error InvalidRelicIndex();
    error InvalidHangarIndex();
    error InvalidShipIndex();
    error InvalidFee();
    error InvalidArcOutput();
    error MiningHasntStarted();
    error WithdrawFailed();
    error InvalidToken();
    error CantUnassignCrew();
    error HangarFullofRelics();
    error TokenDoesNotExist();
    error InvalidFaction();
    error CannotChangeFactionYet();
    error FactionNotActive();
    error FactionFull();
    error NodeSoldOut();
    error NodeMaxReached();
    error MustOwnNFT();
    error MustOwnFungibleToken();
    error InvalidSignature();
    error AlreadyClaimedRelic();
    error RelicNotClaimable();
    error NodeAlreadyInProduction();
    error CantPlayGameYet();
    error CantModifyStarterRelic();
    error RelicSoldOut();
    error RelicMaxReached();
    error ShipNodeCapacityReached();
    error ShipCrewCapacityReached();
    error GameNotActive();
    error InvalidGameIndex();
    error NoNodeAtCoordinates();
    error NodeNotFoundAtCoordinates();
    error AlreadyClaimedMaxRelics();
    error CrewTemplateNotFound();
    error AlreadyHaveCrewFromContract();
    error CrewNotFound();
    error TokenAlreadyExists();
}

File 15 of 31 : PlayerExportData.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

struct PlayerExportData {
    address player;
    // Basic mining data
    uint256 fluxrate;
    uint256 syncrate; 
    uint256 pendingRewards;
    uint256 nethereumDebt;
    uint256 miningStartTime;
    uint256 lastClaimTime;
    
    // Game data
    uint256 gameFluxrate;
    uint256 gameSyncrate;
    uint256 gameExpiry;
    uint256 lastGamePlayTime;
    
    // Faction data
    uint256 factionId;
    uint256 lastFactionChange;
    
    // Hangar/Ship data
    bool hasStarterHangar;
    bool hasStarterShip;
    uint256 hangarIndex;
    uint256 shipIndex;
    uint256 lastHangarUpgrade;
    uint256 lastShipUpgrade;
    
    // Starter items claimed
    bool claimedStarterNode;
    bool claimedStarterRelic;
    
    // Referral data
    address referrer;
    uint256 referralBonusPaid;
}

File 16 of 31 : PlayerAssetData.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

struct PlayerAssetData {
    address player;
    uint256[] nodeIds;
    uint256[] relicIds; 
    uint256[] crewIds;
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 18 of 31 : FixedPointMathLib.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Arithmetic library with operations for fixed-point numbers.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/FixedPointMathLib.sol)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)
library FixedPointMathLib {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The operation failed, as the output exceeds the maximum value of uint256.
    error ExpOverflow();

    /// @dev The operation failed, as the output exceeds the maximum value of uint256.
    error FactorialOverflow();

    /// @dev The operation failed, due to an overflow.
    error RPowOverflow();

    /// @dev The mantissa is too big to fit.
    error MantissaOverflow();

    /// @dev The operation failed, due to an multiplication overflow.
    error MulWadFailed();

    /// @dev The operation failed, due to an multiplication overflow.
    error SMulWadFailed();

    /// @dev The operation failed, either due to a multiplication overflow, or a division by a zero.
    error DivWadFailed();

    /// @dev The operation failed, either due to a multiplication overflow, or a division by a zero.
    error SDivWadFailed();

    /// @dev The operation failed, either due to a multiplication overflow, or a division by a zero.
    error MulDivFailed();

    /// @dev The division failed, as the denominator is zero.
    error DivFailed();

    /// @dev The full precision multiply-divide operation failed, either due
    /// to the result being larger than 256 bits, or a division by a zero.
    error FullMulDivFailed();

    /// @dev The output is undefined, as the input is less-than-or-equal to zero.
    error LnWadUndefined();

    /// @dev The input outside the acceptable domain.
    error OutOfDomain();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         CONSTANTS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The scalar of ETH and most ERC20s.
    uint256 internal constant WAD = 1e18;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*              SIMPLIFIED FIXED POINT OPERATIONS             */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Equivalent to `(x * y) / WAD` rounded down.
    function mulWad(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Equivalent to `require(y == 0 || x <= type(uint256).max / y)`.
            if gt(x, div(not(0), y)) {
                if y {
                    mstore(0x00, 0xbac65e5b) // `MulWadFailed()`.
                    revert(0x1c, 0x04)
                }
            }
            z := div(mul(x, y), WAD)
        }
    }

    /// @dev Equivalent to `(x * y) / WAD` rounded down.
    function sMulWad(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(x, y)
            // Equivalent to `require((x == 0 || z / x == y) && !(x == -1 && y == type(int256).min))`.
            if iszero(gt(or(iszero(x), eq(sdiv(z, x), y)), lt(not(x), eq(y, shl(255, 1))))) {
                mstore(0x00, 0xedcd4dd4) // `SMulWadFailed()`.
                revert(0x1c, 0x04)
            }
            z := sdiv(z, WAD)
        }
    }

    /// @dev Equivalent to `(x * y) / WAD` rounded down, but without overflow checks.
    function rawMulWad(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := div(mul(x, y), WAD)
        }
    }

    /// @dev Equivalent to `(x * y) / WAD` rounded down, but without overflow checks.
    function rawSMulWad(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := sdiv(mul(x, y), WAD)
        }
    }

    /// @dev Equivalent to `(x * y) / WAD` rounded up.
    function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(x, y)
            // Equivalent to `require(y == 0 || x <= type(uint256).max / y)`.
            if iszero(eq(div(z, y), x)) {
                if y {
                    mstore(0x00, 0xbac65e5b) // `MulWadFailed()`.
                    revert(0x1c, 0x04)
                }
            }
            z := add(iszero(iszero(mod(z, WAD))), div(z, WAD))
        }
    }

    /// @dev Equivalent to `(x * y) / WAD` rounded up, but without overflow checks.
    function rawMulWadUp(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := add(iszero(iszero(mod(mul(x, y), WAD))), div(mul(x, y), WAD))
        }
    }

    /// @dev Equivalent to `(x * WAD) / y` rounded down.
    function divWad(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Equivalent to `require(y != 0 && x <= type(uint256).max / WAD)`.
            if iszero(mul(y, lt(x, add(1, div(not(0), WAD))))) {
                mstore(0x00, 0x7c5f487d) // `DivWadFailed()`.
                revert(0x1c, 0x04)
            }
            z := div(mul(x, WAD), y)
        }
    }

    /// @dev Equivalent to `(x * WAD) / y` rounded down.
    function sDivWad(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(x, WAD)
            // Equivalent to `require(y != 0 && ((x * WAD) / WAD == x))`.
            if iszero(mul(y, eq(sdiv(z, WAD), x))) {
                mstore(0x00, 0x5c43740d) // `SDivWadFailed()`.
                revert(0x1c, 0x04)
            }
            z := sdiv(z, y)
        }
    }

    /// @dev Equivalent to `(x * WAD) / y` rounded down, but without overflow and divide by zero checks.
    function rawDivWad(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := div(mul(x, WAD), y)
        }
    }

    /// @dev Equivalent to `(x * WAD) / y` rounded down, but without overflow and divide by zero checks.
    function rawSDivWad(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := sdiv(mul(x, WAD), y)
        }
    }

    /// @dev Equivalent to `(x * WAD) / y` rounded up.
    function divWadUp(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Equivalent to `require(y != 0 && x <= type(uint256).max / WAD)`.
            if iszero(mul(y, lt(x, add(1, div(not(0), WAD))))) {
                mstore(0x00, 0x7c5f487d) // `DivWadFailed()`.
                revert(0x1c, 0x04)
            }
            z := add(iszero(iszero(mod(mul(x, WAD), y))), div(mul(x, WAD), y))
        }
    }

    /// @dev Equivalent to `(x * WAD) / y` rounded up, but without overflow and divide by zero checks.
    function rawDivWadUp(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := add(iszero(iszero(mod(mul(x, WAD), y))), div(mul(x, WAD), y))
        }
    }

    /// @dev Equivalent to `x` to the power of `y`.
    /// because `x ** y = (e ** ln(x)) ** y = e ** (ln(x) * y)`.
    /// Note: This function is an approximation.
    function powWad(int256 x, int256 y) internal pure returns (int256) {
        // Using `ln(x)` means `x` must be greater than 0.
        return expWad((lnWad(x) * y) / int256(WAD));
    }

    /// @dev Returns `exp(x)`, denominated in `WAD`.
    /// Credit to Remco Bloemen under MIT license: https://2π.com/22/exp-ln
    /// Note: This function is an approximation. Monotonically increasing.
    function expWad(int256 x) internal pure returns (int256 r) {
        unchecked {
            // When the result is less than 0.5 we return zero.
            // This happens when `x <= (log(1e-18) * 1e18) ~ -4.15e19`.
            if (x <= -41446531673892822313) return r;

            /// @solidity memory-safe-assembly
            assembly {
                // When the result is greater than `(2**255 - 1) / 1e18` we can not represent it as
                // an int. This happens when `x >= floor(log((2**255 - 1) / 1e18) * 1e18) ≈ 135`.
                if iszero(slt(x, 135305999368893231589)) {
                    mstore(0x00, 0xa37bfec9) // `ExpOverflow()`.
                    revert(0x1c, 0x04)
                }
            }

            // `x` is now in the range `(-42, 136) * 1e18`. Convert to `(-42, 136) * 2**96`
            // for more intermediate precision and a binary basis. This base conversion
            // is a multiplication by 1e18 / 2**96 = 5**18 / 2**78.
            x = (x << 78) / 5 ** 18;

            // Reduce range of x to (-½ ln 2, ½ ln 2) * 2**96 by factoring out powers
            // of two such that exp(x) = exp(x') * 2**k, where k is an integer.
            // Solving this gives k = round(x / log(2)) and x' = x - k * log(2).
            int256 k = ((x << 96) / 54916777467707473351141471128 + 2 ** 95) >> 96;
            x = x - k * 54916777467707473351141471128;

            // `k` is in the range `[-61, 195]`.

            // Evaluate using a (6, 7)-term rational approximation.
            // `p` is made monic, we'll multiply by a scale factor later.
            int256 y = x + 1346386616545796478920950773328;
            y = ((y * x) >> 96) + 57155421227552351082224309758442;
            int256 p = y + x - 94201549194550492254356042504812;
            p = ((p * y) >> 96) + 28719021644029726153956944680412240;
            p = p * x + (4385272521454847904659076985693276 << 96);

            // We leave `p` in `2**192` basis so we don't need to scale it back up for the division.
            int256 q = x - 2855989394907223263936484059900;
            q = ((q * x) >> 96) + 50020603652535783019961831881945;
            q = ((q * x) >> 96) - 533845033583426703283633433725380;
            q = ((q * x) >> 96) + 3604857256930695427073651918091429;
            q = ((q * x) >> 96) - 14423608567350463180887372962807573;
            q = ((q * x) >> 96) + 26449188498355588339934803723976023;

            /// @solidity memory-safe-assembly
            assembly {
                // Div in assembly because solidity adds a zero check despite the unchecked.
                // The q polynomial won't have zeros in the domain as all its roots are complex.
                // No scaling is necessary because p is already `2**96` too large.
                r := sdiv(p, q)
            }

            // r should be in the range `(0.09, 0.25) * 2**96`.

            // We now need to multiply r by:
            // - The scale factor `s ≈ 6.031367120`.
            // - The `2**k` factor from the range reduction.
            // - The `1e18 / 2**96` factor for base conversion.
            // We do this all at once, with an intermediate result in `2**213`
            // basis, so the final right shift is always by a positive amount.
            r = int256(
                (uint256(r) * 3822833074963236453042738258902158003155416615667) >> uint256(195 - k)
            );
        }
    }

    /// @dev Returns `ln(x)`, denominated in `WAD`.
    /// Credit to Remco Bloemen under MIT license: https://2π.com/22/exp-ln
    /// Note: This function is an approximation. Monotonically increasing.
    function lnWad(int256 x) internal pure returns (int256 r) {
        /// @solidity memory-safe-assembly
        assembly {
            // We want to convert `x` from `10**18` fixed point to `2**96` fixed point.
            // We do this by multiplying by `2**96 / 10**18`. But since
            // `ln(x * C) = ln(x) + ln(C)`, we can simply do nothing here
            // and add `ln(2**96 / 10**18)` at the end.

            // Compute `k = log2(x) - 96`, `r = 159 - k = 255 - log2(x) = 255 ^ log2(x)`.
            r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x))
            r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x))))
            r := or(r, shl(5, lt(0xffffffff, shr(r, x))))
            r := or(r, shl(4, lt(0xffff, shr(r, x))))
            r := or(r, shl(3, lt(0xff, shr(r, x))))
            // We place the check here for more optimal stack operations.
            if iszero(sgt(x, 0)) {
                mstore(0x00, 0x1615e638) // `LnWadUndefined()`.
                revert(0x1c, 0x04)
            }
            // forgefmt: disable-next-item
            r := xor(r, byte(and(0x1f, shr(shr(r, x), 0x8421084210842108cc6318c6db6d54be)),
                0xf8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff))

            // Reduce range of x to (1, 2) * 2**96
            // ln(2^k * x) = k * ln(2) + ln(x)
            x := shr(159, shl(r, x))

            // Evaluate using a (8, 8)-term rational approximation.
            // `p` is made monic, we will multiply by a scale factor later.
            // forgefmt: disable-next-item
            let p := sub( // This heavily nested expression is to avoid stack-too-deep for via-ir.
                sar(96, mul(add(43456485725739037958740375743393,
                sar(96, mul(add(24828157081833163892658089445524,
                sar(96, mul(add(3273285459638523848632254066296,
                    x), x))), x))), x)), 11111509109440967052023855526967)
            p := sub(sar(96, mul(p, x)), 45023709667254063763336534515857)
            p := sub(sar(96, mul(p, x)), 14706773417378608786704636184526)
            p := sub(mul(p, x), shl(96, 795164235651350426258249787498))
            // We leave `p` in `2**192` basis so we don't need to scale it back up for the division.

            // `q` is monic by convention.
            let q := add(5573035233440673466300451813936, x)
            q := add(71694874799317883764090561454958, sar(96, mul(x, q)))
            q := add(283447036172924575727196451306956, sar(96, mul(x, q)))
            q := add(401686690394027663651624208769553, sar(96, mul(x, q)))
            q := add(204048457590392012362485061816622, sar(96, mul(x, q)))
            q := add(31853899698501571402653359427138, sar(96, mul(x, q)))
            q := add(909429971244387300277376558375, sar(96, mul(x, q)))

            // `p / q` is in the range `(0, 0.125) * 2**96`.

            // Finalization, we need to:
            // - Multiply by the scale factor `s = 5.549…`.
            // - Add `ln(2**96 / 10**18)`.
            // - Add `k * ln(2)`.
            // - Multiply by `10**18 / 2**96 = 5**18 >> 78`.

            // The q polynomial is known not to have zeros in the domain.
            // No scaling required because p is already `2**96` too large.
            p := sdiv(p, q)
            // Multiply by the scaling factor: `s * 5**18 * 2**96`, base is now `5**18 * 2**192`.
            p := mul(1677202110996718588342820967067443963516166, p)
            // Add `ln(2) * k * 5**18 * 2**192`.
            // forgefmt: disable-next-item
            p := add(mul(16597577552685614221487285958193947469193820559219878177908093499208371, sub(159, r)), p)
            // Add `ln(2**96 / 10**18) * 5**18 * 2**192`.
            p := add(600920179829731861736702779321621459595472258049074101567377883020018308, p)
            // Base conversion: mul `2**18 / 2**192`.
            r := sar(174, p)
        }
    }

    /// @dev Returns `W_0(x)`, denominated in `WAD`.
    /// See: https://en.wikipedia.org/wiki/Lambert_W_function
    /// a.k.a. Product log function. This is an approximation of the principal branch.
    /// Note: This function is an approximation. Monotonically increasing.
    function lambertW0Wad(int256 x) internal pure returns (int256 w) {
        // forgefmt: disable-next-item
        unchecked {
            if ((w = x) <= -367879441171442322) revert OutOfDomain(); // `x` less than `-1/e`.
            (int256 wad, int256 p) = (int256(WAD), x);
            uint256 c; // Whether we need to avoid catastrophic cancellation.
            uint256 i = 4; // Number of iterations.
            if (w <= 0x1ffffffffffff) {
                if (-0x4000000000000 <= w) {
                    i = 1; // Inputs near zero only take one step to converge.
                } else if (w <= -0x3ffffffffffffff) {
                    i = 32; // Inputs near `-1/e` take very long to converge.
                }
            } else if (uint256(w >> 63) == uint256(0)) {
                /// @solidity memory-safe-assembly
                assembly {
                    // Inline log2 for more performance, since the range is small.
                    let v := shr(49, w)
                    let l := shl(3, lt(0xff, v))
                    l := add(or(l, byte(and(0x1f, shr(shr(l, v), 0x8421084210842108cc6318c6db6d54be)),
                        0x0706060506020504060203020504030106050205030304010505030400000000)), 49)
                    w := sdiv(shl(l, 7), byte(sub(l, 31), 0x0303030303030303040506080c13))
                    c := gt(l, 60)
                    i := add(2, add(gt(l, 53), c))
                }
            } else {
                int256 ll = lnWad(w = lnWad(w));
                /// @solidity memory-safe-assembly
                assembly {
                    // `w = ln(x) - ln(ln(x)) + b * ln(ln(x)) / ln(x)`.
                    w := add(sdiv(mul(ll, 1023715080943847266), w), sub(w, ll))
                    i := add(3, iszero(shr(68, x)))
                    c := iszero(shr(143, x))
                }
                if (c == uint256(0)) {
                    do { // If `x` is big, use Newton's so that intermediate values won't overflow.
                        int256 e = expWad(w);
                        /// @solidity memory-safe-assembly
                        assembly {
                            let t := mul(w, div(e, wad))
                            w := sub(w, sdiv(sub(t, x), div(add(e, t), wad)))
                        }
                        if (p <= w) break;
                        p = w;
                    } while (--i != uint256(0));
                    /// @solidity memory-safe-assembly
                    assembly {
                        w := sub(w, sgt(w, 2))
                    }
                    return w;
                }
            }
            do { // Otherwise, use Halley's for faster convergence.
                int256 e = expWad(w);
                /// @solidity memory-safe-assembly
                assembly {
                    let t := add(w, wad)
                    let s := sub(mul(w, e), mul(x, wad))
                    w := sub(w, sdiv(mul(s, wad), sub(mul(e, t), sdiv(mul(add(t, wad), s), add(t, t)))))
                }
                if (p <= w) break;
                p = w;
            } while (--i != c);
            /// @solidity memory-safe-assembly
            assembly {
                w := sub(w, sgt(w, 2))
            }
            // For certain ranges of `x`, we'll use the quadratic-rate recursive formula of
            // R. Iacono and J.P. Boyd for the last iteration, to avoid catastrophic cancellation.
            if (c == uint256(0)) return w;
            int256 t = w | 1;
            /// @solidity memory-safe-assembly
            assembly {
                x := sdiv(mul(x, wad), t)
            }
            x = (t * (wad + lnWad(x)));
            /// @solidity memory-safe-assembly
            assembly {
                w := sdiv(x, add(wad, t))
            }
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                  GENERAL NUMBER UTILITIES                  */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns `a * b == x * y`, with full precision.
    function fullMulEq(uint256 a, uint256 b, uint256 x, uint256 y)
        internal
        pure
        returns (bool result)
    {
        /// @solidity memory-safe-assembly
        assembly {
            result := and(eq(mul(a, b), mul(x, y)), eq(mulmod(x, y, not(0)), mulmod(a, b, not(0))))
        }
    }

    /// @dev Calculates `floor(x * y / d)` with full precision.
    /// Throws if result overflows a uint256 or when `d` is zero.
    /// Credit to Remco Bloemen under MIT license: https://2π.com/21/muldiv
    function fullMulDiv(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // 512-bit multiply `[p1 p0] = x * y`.
            // Compute the product mod `2**256` and mod `2**256 - 1`
            // then use the Chinese Remainder Theorem to reconstruct
            // the 512 bit result. The result is stored in two 256
            // variables such that `product = p1 * 2**256 + p0`.

            // Temporarily use `z` as `p0` to save gas.
            z := mul(x, y) // Lower 256 bits of `x * y`.
            for {} 1 {} {
                // If overflows.
                if iszero(mul(or(iszero(x), eq(div(z, x), y)), d)) {
                    let mm := mulmod(x, y, not(0))
                    let p1 := sub(mm, add(z, lt(mm, z))) // Upper 256 bits of `x * y`.

                    /*------------------- 512 by 256 division --------------------*/

                    // Make division exact by subtracting the remainder from `[p1 p0]`.
                    let r := mulmod(x, y, d) // Compute remainder using mulmod.
                    let t := and(d, sub(0, d)) // The least significant bit of `d`. `t >= 1`.
                    // Make sure `z` is less than `2**256`. Also prevents `d == 0`.
                    // Placing the check here seems to give more optimal stack operations.
                    if iszero(gt(d, p1)) {
                        mstore(0x00, 0xae47f702) // `FullMulDivFailed()`.
                        revert(0x1c, 0x04)
                    }
                    d := div(d, t) // Divide `d` by `t`, which is a power of two.
                    // Invert `d mod 2**256`
                    // Now that `d` is an odd number, it has an inverse
                    // modulo `2**256` such that `d * inv = 1 mod 2**256`.
                    // Compute the inverse by starting with a seed that is correct
                    // correct for four bits. That is, `d * inv = 1 mod 2**4`.
                    let inv := xor(2, mul(3, d))
                    // Now use Newton-Raphson iteration to improve the precision.
                    // Thanks to Hensel's lifting lemma, this also works in modular
                    // arithmetic, doubling the correct bits in each step.
                    inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**8
                    inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**16
                    inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**32
                    inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**64
                    inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**128
                    z :=
                        mul(
                            // Divide [p1 p0] by the factors of two.
                            // Shift in bits from `p1` into `p0`. For this we need
                            // to flip `t` such that it is `2**256 / t`.
                            or(mul(sub(p1, gt(r, z)), add(div(sub(0, t), t), 1)), div(sub(z, r), t)),
                            mul(sub(2, mul(d, inv)), inv) // inverse mod 2**256
                        )
                    break
                }
                z := div(z, d)
                break
            }
        }
    }

    /// @dev Calculates `floor(x * y / d)` with full precision.
    /// Behavior is undefined if `d` is zero or the final result cannot fit in 256 bits.
    /// Performs the full 512 bit calculation regardless.
    function fullMulDivUnchecked(uint256 x, uint256 y, uint256 d)
        internal
        pure
        returns (uint256 z)
    {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(x, y)
            let mm := mulmod(x, y, not(0))
            let p1 := sub(mm, add(z, lt(mm, z)))
            let t := and(d, sub(0, d))
            let r := mulmod(x, y, d)
            d := div(d, t)
            let inv := xor(2, mul(3, d))
            inv := mul(inv, sub(2, mul(d, inv)))
            inv := mul(inv, sub(2, mul(d, inv)))
            inv := mul(inv, sub(2, mul(d, inv)))
            inv := mul(inv, sub(2, mul(d, inv)))
            inv := mul(inv, sub(2, mul(d, inv)))
            z :=
                mul(
                    or(mul(sub(p1, gt(r, z)), add(div(sub(0, t), t), 1)), div(sub(z, r), t)),
                    mul(sub(2, mul(d, inv)), inv)
                )
        }
    }

    /// @dev Calculates `floor(x * y / d)` with full precision, rounded up.
    /// Throws if result overflows a uint256 or when `d` is zero.
    /// Credit to Uniswap-v3-core under MIT license:
    /// https://github.com/Uniswap/v3-core/blob/main/contracts/libraries/FullMath.sol
    function fullMulDivUp(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
        z = fullMulDiv(x, y, d);
        /// @solidity memory-safe-assembly
        assembly {
            if mulmod(x, y, d) {
                z := add(z, 1)
                if iszero(z) {
                    mstore(0x00, 0xae47f702) // `FullMulDivFailed()`.
                    revert(0x1c, 0x04)
                }
            }
        }
    }

    /// @dev Calculates `floor(x * y / 2 ** n)` with full precision.
    /// Throws if result overflows a uint256.
    /// Credit to Philogy under MIT license:
    /// https://github.com/SorellaLabs/angstrom/blob/main/contracts/src/libraries/X128MathLib.sol
    function fullMulDivN(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // Temporarily use `z` as `p0` to save gas.
            z := mul(x, y) // Lower 256 bits of `x * y`. We'll call this `z`.
            for {} 1 {} {
                if iszero(or(iszero(x), eq(div(z, x), y))) {
                    let k := and(n, 0xff) // `n`, cleaned.
                    let mm := mulmod(x, y, not(0))
                    let p1 := sub(mm, add(z, lt(mm, z))) // Upper 256 bits of `x * y`.
                    //         |      p1     |      z     |
                    // Before: | p1_0 ¦ p1_1 | z_0  ¦ z_1 |
                    // Final:  |   0  ¦ p1_0 | p1_1 ¦ z_0 |
                    // Check that final `z` doesn't overflow by checking that p1_0 = 0.
                    if iszero(shr(k, p1)) {
                        z := add(shl(sub(256, k), p1), shr(k, z))
                        break
                    }
                    mstore(0x00, 0xae47f702) // `FullMulDivFailed()`.
                    revert(0x1c, 0x04)
                }
                z := shr(and(n, 0xff), z)
                break
            }
        }
    }

    /// @dev Returns `floor(x * y / d)`.
    /// Reverts if `x * y` overflows, or `d` is zero.
    function mulDiv(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(x, y)
            // Equivalent to `require(d != 0 && (y == 0 || x <= type(uint256).max / y))`.
            if iszero(mul(or(iszero(x), eq(div(z, x), y)), d)) {
                mstore(0x00, 0xad251c27) // `MulDivFailed()`.
                revert(0x1c, 0x04)
            }
            z := div(z, d)
        }
    }

    /// @dev Returns `ceil(x * y / d)`.
    /// Reverts if `x * y` overflows, or `d` is zero.
    function mulDivUp(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(x, y)
            // Equivalent to `require(d != 0 && (y == 0 || x <= type(uint256).max / y))`.
            if iszero(mul(or(iszero(x), eq(div(z, x), y)), d)) {
                mstore(0x00, 0xad251c27) // `MulDivFailed()`.
                revert(0x1c, 0x04)
            }
            z := add(iszero(iszero(mod(z, d))), div(z, d))
        }
    }

    /// @dev Returns `x`, the modular multiplicative inverse of `a`, such that `(a * x) % n == 1`.
    function invMod(uint256 a, uint256 n) internal pure returns (uint256 x) {
        /// @solidity memory-safe-assembly
        assembly {
            let g := n
            let r := mod(a, n)
            for { let y := 1 } 1 {} {
                let q := div(g, r)
                let t := g
                g := r
                r := sub(t, mul(r, q))
                let u := x
                x := y
                y := sub(u, mul(y, q))
                if iszero(r) { break }
            }
            x := mul(eq(g, 1), add(x, mul(slt(x, 0), n)))
        }
    }

    /// @dev Returns `ceil(x / d)`.
    /// Reverts if `d` is zero.
    function divUp(uint256 x, uint256 d) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(d) {
                mstore(0x00, 0x65244e4e) // `DivFailed()`.
                revert(0x1c, 0x04)
            }
            z := add(iszero(iszero(mod(x, d))), div(x, d))
        }
    }

    /// @dev Returns `max(0, x - y)`. Alias for `saturatingSub`.
    function zeroFloorSub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(gt(x, y), sub(x, y))
        }
    }

    /// @dev Returns `max(0, x - y)`.
    function saturatingSub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(gt(x, y), sub(x, y))
        }
    }

    /// @dev Returns `min(2 ** 256 - 1, x + y)`.
    function saturatingAdd(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := or(sub(0, lt(add(x, y), x)), add(x, y))
        }
    }

    /// @dev Returns `min(2 ** 256 - 1, x * y)`.
    function saturatingMul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := or(sub(or(iszero(x), eq(div(mul(x, y), x), y)), 1), mul(x, y))
        }
    }

    /// @dev Returns `condition ? x : y`, without branching.
    function ternary(bool condition, uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, y), iszero(condition)))
        }
    }

    /// @dev Returns `condition ? x : y`, without branching.
    function ternary(bool condition, bytes32 x, bytes32 y) internal pure returns (bytes32 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, y), iszero(condition)))
        }
    }

    /// @dev Returns `condition ? x : y`, without branching.
    function ternary(bool condition, address x, address y) internal pure returns (address z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, y), iszero(condition)))
        }
    }

    /// @dev Returns `x != 0 ? x : y`, without branching.
    function coalesce(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := or(x, mul(y, iszero(x)))
        }
    }

    /// @dev Returns `x != bytes32(0) ? x : y`, without branching.
    function coalesce(bytes32 x, bytes32 y) internal pure returns (bytes32 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := or(x, mul(y, iszero(x)))
        }
    }

    /// @dev Returns `x != address(0) ? x : y`, without branching.
    function coalesce(address x, address y) internal pure returns (address z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := or(x, mul(y, iszero(shl(96, x))))
        }
    }

    /// @dev Exponentiate `x` to `y` by squaring, denominated in base `b`.
    /// Reverts if the computation overflows.
    function rpow(uint256 x, uint256 y, uint256 b) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mul(b, iszero(y)) // `0 ** 0 = 1`. Otherwise, `0 ** n = 0`.
            if x {
                z := xor(b, mul(xor(b, x), and(y, 1))) // `z = isEven(y) ? scale : x`
                let half := shr(1, b) // Divide `b` by 2.
                // Divide `y` by 2 every iteration.
                for { y := shr(1, y) } y { y := shr(1, y) } {
                    let xx := mul(x, x) // Store x squared.
                    let xxRound := add(xx, half) // Round to the nearest number.
                    // Revert if `xx + half` overflowed, or if `x ** 2` overflows.
                    if or(lt(xxRound, xx), shr(128, x)) {
                        mstore(0x00, 0x49f7642b) // `RPowOverflow()`.
                        revert(0x1c, 0x04)
                    }
                    x := div(xxRound, b) // Set `x` to scaled `xxRound`.
                    // If `y` is odd:
                    if and(y, 1) {
                        let zx := mul(z, x) // Compute `z * x`.
                        let zxRound := add(zx, half) // Round to the nearest number.
                        // If `z * x` overflowed or `zx + half` overflowed:
                        if or(xor(div(zx, x), z), lt(zxRound, zx)) {
                            // Revert if `x` is non-zero.
                            if x {
                                mstore(0x00, 0x49f7642b) // `RPowOverflow()`.
                                revert(0x1c, 0x04)
                            }
                        }
                        z := div(zxRound, b) // Return properly scaled `zxRound`.
                    }
                }
            }
        }
    }

    /// @dev Returns the square root of `x`, rounded down.
    function sqrt(uint256 x) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            // `floor(sqrt(2**15)) = 181`. `sqrt(2**15) - 181 = 2.84`.
            z := 181 // The "correct" value is 1, but this saves a multiplication later.

            // This segment is to get a reasonable initial estimate for the Babylonian method. With a bad
            // start, the correct # of bits increases ~linearly each iteration instead of ~quadratically.

            // Let `y = x / 2**r`. We check `y >= 2**(k + 8)`
            // but shift right by `k` bits to ensure that if `x >= 256`, then `y >= 256`.
            let r := shl(7, lt(0xffffffffffffffffffffffffffffffffff, x))
            r := or(r, shl(6, lt(0xffffffffffffffffff, shr(r, x))))
            r := or(r, shl(5, lt(0xffffffffff, shr(r, x))))
            r := or(r, shl(4, lt(0xffffff, shr(r, x))))
            z := shl(shr(1, r), z)

            // Goal was to get `z*z*y` within a small factor of `x`. More iterations could
            // get y in a tighter range. Currently, we will have y in `[256, 256*(2**16))`.
            // We ensured `y >= 256` so that the relative difference between `y` and `y+1` is small.
            // That's not possible if `x < 256` but we can just verify those cases exhaustively.

            // Now, `z*z*y <= x < z*z*(y+1)`, and `y <= 2**(16+8)`, and either `y >= 256`, or `x < 256`.
            // Correctness can be checked exhaustively for `x < 256`, so we assume `y >= 256`.
            // Then `z*sqrt(y)` is within `sqrt(257)/sqrt(256)` of `sqrt(x)`, or about 20bps.

            // For `s` in the range `[1/256, 256]`, the estimate `f(s) = (181/1024) * (s+1)`
            // is in the range `(1/2.84 * sqrt(s), 2.84 * sqrt(s))`,
            // with largest error when `s = 1` and when `s = 256` or `1/256`.

            // Since `y` is in `[256, 256*(2**16))`, let `a = y/65536`, so that `a` is in `[1/256, 256)`.
            // Then we can estimate `sqrt(y)` using
            // `sqrt(65536) * 181/1024 * (a + 1) = 181/4 * (y + 65536)/65536 = 181 * (y + 65536)/2**18`.

            // There is no overflow risk here since `y < 2**136` after the first branch above.
            z := shr(18, mul(z, add(shr(r, x), 65536))) // A `mul()` is saved from starting `z` at 181.

            // Given the worst case multiplicative error of 2.84 above, 7 iterations should be enough.
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))
            z := shr(1, add(z, div(x, z)))

            // If `x+1` is a perfect square, the Babylonian method cycles between
            // `floor(sqrt(x))` and `ceil(sqrt(x))`. This statement ensures we return floor.
            // See: https://en.wikipedia.org/wiki/Integer_square_root#Using_only_integer_division
            z := sub(z, lt(div(x, z), z))
        }
    }

    /// @dev Returns the cube root of `x`, rounded down.
    /// Credit to bout3fiddy and pcaversaccio under AGPLv3 license:
    /// https://github.com/pcaversaccio/snekmate/blob/main/src/snekmate/utils/math.vy
    /// Formally verified by xuwinnie:
    /// https://github.com/vectorized/solady/blob/main/audits/xuwinnie-solady-cbrt-proof.pdf
    function cbrt(uint256 x) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            let r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x))
            r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x))))
            r := or(r, shl(5, lt(0xffffffff, shr(r, x))))
            r := or(r, shl(4, lt(0xffff, shr(r, x))))
            r := or(r, shl(3, lt(0xff, shr(r, x))))
            // Makeshift lookup table to nudge the approximate log2 result.
            z := div(shl(div(r, 3), shl(lt(0xf, shr(r, x)), 0xf)), xor(7, mod(r, 3)))
            // Newton-Raphson's.
            z := div(add(add(div(x, mul(z, z)), z), z), 3)
            z := div(add(add(div(x, mul(z, z)), z), z), 3)
            z := div(add(add(div(x, mul(z, z)), z), z), 3)
            z := div(add(add(div(x, mul(z, z)), z), z), 3)
            z := div(add(add(div(x, mul(z, z)), z), z), 3)
            z := div(add(add(div(x, mul(z, z)), z), z), 3)
            z := div(add(add(div(x, mul(z, z)), z), z), 3)
            // Round down.
            z := sub(z, lt(div(x, mul(z, z)), z))
        }
    }

    /// @dev Returns the square root of `x`, denominated in `WAD`, rounded down.
    function sqrtWad(uint256 x) internal pure returns (uint256 z) {
        unchecked {
            if (x <= type(uint256).max / 10 ** 18) return sqrt(x * 10 ** 18);
            z = (1 + sqrt(x)) * 10 ** 9;
            z = (fullMulDivUnchecked(x, 10 ** 18, z) + z) >> 1;
        }
        /// @solidity memory-safe-assembly
        assembly {
            z := sub(z, gt(999999999999999999, sub(mulmod(z, z, x), 1))) // Round down.
        }
    }

    /// @dev Returns the cube root of `x`, denominated in `WAD`, rounded down.
    /// Formally verified by xuwinnie:
    /// https://github.com/vectorized/solady/blob/main/audits/xuwinnie-solady-cbrt-proof.pdf
    function cbrtWad(uint256 x) internal pure returns (uint256 z) {
        unchecked {
            if (x <= type(uint256).max / 10 ** 36) return cbrt(x * 10 ** 36);
            z = (1 + cbrt(x)) * 10 ** 12;
            z = (fullMulDivUnchecked(x, 10 ** 36, z * z) + z + z) / 3;
        }
        /// @solidity memory-safe-assembly
        assembly {
            let p := x
            for {} 1 {} {
                if iszero(shr(229, p)) {
                    if iszero(shr(199, p)) {
                        p := mul(p, 100000000000000000) // 10 ** 17.
                        break
                    }
                    p := mul(p, 100000000) // 10 ** 8.
                    break
                }
                if iszero(shr(249, p)) { p := mul(p, 100) }
                break
            }
            let t := mulmod(mul(z, z), z, p)
            z := sub(z, gt(lt(t, shr(1, p)), iszero(t))) // Round down.
        }
    }

    /// @dev Returns the factorial of `x`.
    function factorial(uint256 x) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := 1
            if iszero(lt(x, 58)) {
                mstore(0x00, 0xaba0f2a2) // `FactorialOverflow()`.
                revert(0x1c, 0x04)
            }
            for {} x { x := sub(x, 1) } { z := mul(z, x) }
        }
    }

    /// @dev Returns the log2 of `x`.
    /// Equivalent to computing the index of the most significant bit (MSB) of `x`.
    /// Returns 0 if `x` is zero.
    function log2(uint256 x) internal pure returns (uint256 r) {
        /// @solidity memory-safe-assembly
        assembly {
            r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x))
            r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x))))
            r := or(r, shl(5, lt(0xffffffff, shr(r, x))))
            r := or(r, shl(4, lt(0xffff, shr(r, x))))
            r := or(r, shl(3, lt(0xff, shr(r, x))))
            // forgefmt: disable-next-item
            r := or(r, byte(and(0x1f, shr(shr(r, x), 0x8421084210842108cc6318c6db6d54be)),
                0x0706060506020504060203020504030106050205030304010505030400000000))
        }
    }

    /// @dev Returns the log2 of `x`, rounded up.
    /// Returns 0 if `x` is zero.
    function log2Up(uint256 x) internal pure returns (uint256 r) {
        r = log2(x);
        /// @solidity memory-safe-assembly
        assembly {
            r := add(r, lt(shl(r, 1), x))
        }
    }

    /// @dev Returns the log10 of `x`.
    /// Returns 0 if `x` is zero.
    function log10(uint256 x) internal pure returns (uint256 r) {
        /// @solidity memory-safe-assembly
        assembly {
            if iszero(lt(x, 100000000000000000000000000000000000000)) {
                x := div(x, 100000000000000000000000000000000000000)
                r := 38
            }
            if iszero(lt(x, 100000000000000000000)) {
                x := div(x, 100000000000000000000)
                r := add(r, 20)
            }
            if iszero(lt(x, 10000000000)) {
                x := div(x, 10000000000)
                r := add(r, 10)
            }
            if iszero(lt(x, 100000)) {
                x := div(x, 100000)
                r := add(r, 5)
            }
            r := add(r, add(gt(x, 9), add(gt(x, 99), add(gt(x, 999), gt(x, 9999)))))
        }
    }

    /// @dev Returns the log10 of `x`, rounded up.
    /// Returns 0 if `x` is zero.
    function log10Up(uint256 x) internal pure returns (uint256 r) {
        r = log10(x);
        /// @solidity memory-safe-assembly
        assembly {
            r := add(r, lt(exp(10, r), x))
        }
    }

    /// @dev Returns the log256 of `x`.
    /// Returns 0 if `x` is zero.
    function log256(uint256 x) internal pure returns (uint256 r) {
        /// @solidity memory-safe-assembly
        assembly {
            r := shl(7, lt(0xffffffffffffffffffffffffffffffff, x))
            r := or(r, shl(6, lt(0xffffffffffffffff, shr(r, x))))
            r := or(r, shl(5, lt(0xffffffff, shr(r, x))))
            r := or(r, shl(4, lt(0xffff, shr(r, x))))
            r := or(shr(3, r), lt(0xff, shr(r, x)))
        }
    }

    /// @dev Returns the log256 of `x`, rounded up.
    /// Returns 0 if `x` is zero.
    function log256Up(uint256 x) internal pure returns (uint256 r) {
        r = log256(x);
        /// @solidity memory-safe-assembly
        assembly {
            r := add(r, lt(shl(shl(3, r), 1), x))
        }
    }

    /// @dev Returns the scientific notation format `mantissa * 10 ** exponent` of `x`.
    /// Useful for compressing prices (e.g. using 25 bit mantissa and 7 bit exponent).
    function sci(uint256 x) internal pure returns (uint256 mantissa, uint256 exponent) {
        /// @solidity memory-safe-assembly
        assembly {
            mantissa := x
            if mantissa {
                if iszero(mod(mantissa, 1000000000000000000000000000000000)) {
                    mantissa := div(mantissa, 1000000000000000000000000000000000)
                    exponent := 33
                }
                if iszero(mod(mantissa, 10000000000000000000)) {
                    mantissa := div(mantissa, 10000000000000000000)
                    exponent := add(exponent, 19)
                }
                if iszero(mod(mantissa, 1000000000000)) {
                    mantissa := div(mantissa, 1000000000000)
                    exponent := add(exponent, 12)
                }
                if iszero(mod(mantissa, 1000000)) {
                    mantissa := div(mantissa, 1000000)
                    exponent := add(exponent, 6)
                }
                if iszero(mod(mantissa, 10000)) {
                    mantissa := div(mantissa, 10000)
                    exponent := add(exponent, 4)
                }
                if iszero(mod(mantissa, 100)) {
                    mantissa := div(mantissa, 100)
                    exponent := add(exponent, 2)
                }
                if iszero(mod(mantissa, 10)) {
                    mantissa := div(mantissa, 10)
                    exponent := add(exponent, 1)
                }
            }
        }
    }

    /// @dev Convenience function for packing `x` into a smaller number using `sci`.
    /// The `mantissa` will be in bits [7..255] (the upper 249 bits).
    /// The `exponent` will be in bits [0..6] (the lower 7 bits).
    /// Use `SafeCastLib` to safely ensure that the `packed` number is small
    /// enough to fit in the desired unsigned integer type:
    /// ```
    ///     uint32 packed = SafeCastLib.toUint32(FixedPointMathLib.packSci(777 ether));
    /// ```
    function packSci(uint256 x) internal pure returns (uint256 packed) {
        (x, packed) = sci(x); // Reuse for `mantissa` and `exponent`.
        /// @solidity memory-safe-assembly
        assembly {
            if shr(249, x) {
                mstore(0x00, 0xce30380c) // `MantissaOverflow()`.
                revert(0x1c, 0x04)
            }
            packed := or(shl(7, x), packed)
        }
    }

    /// @dev Convenience function for unpacking a packed number from `packSci`.
    function unpackSci(uint256 packed) internal pure returns (uint256 unpacked) {
        unchecked {
            unpacked = (packed >> 7) * 10 ** (packed & 0x7f);
        }
    }

    /// @dev Returns the average of `x` and `y`. Rounds towards zero.
    function avg(uint256 x, uint256 y) internal pure returns (uint256 z) {
        unchecked {
            z = (x & y) + ((x ^ y) >> 1);
        }
    }

    /// @dev Returns the average of `x` and `y`. Rounds towards negative infinity.
    function avg(int256 x, int256 y) internal pure returns (int256 z) {
        unchecked {
            z = (x >> 1) + (y >> 1) + (x & y & 1);
        }
    }

    /// @dev Returns the absolute value of `x`.
    function abs(int256 x) internal pure returns (uint256 z) {
        unchecked {
            z = (uint256(x) + uint256(x >> 255)) ^ uint256(x >> 255);
        }
    }

    /// @dev Returns the absolute distance between `x` and `y`.
    function dist(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := add(xor(sub(0, gt(x, y)), sub(y, x)), gt(x, y))
        }
    }

    /// @dev Returns the absolute distance between `x` and `y`.
    function dist(int256 x, int256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := add(xor(sub(0, sgt(x, y)), sub(y, x)), sgt(x, y))
        }
    }

    /// @dev Returns the minimum of `x` and `y`.
    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, y), lt(y, x)))
        }
    }

    /// @dev Returns the minimum of `x` and `y`.
    function min(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, y), slt(y, x)))
        }
    }

    /// @dev Returns the maximum of `x` and `y`.
    function max(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, y), gt(y, x)))
        }
    }

    /// @dev Returns the maximum of `x` and `y`.
    function max(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, y), sgt(y, x)))
        }
    }

    /// @dev Returns `x`, bounded to `minValue` and `maxValue`.
    function clamp(uint256 x, uint256 minValue, uint256 maxValue)
        internal
        pure
        returns (uint256 z)
    {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, minValue), gt(minValue, x)))
            z := xor(z, mul(xor(z, maxValue), lt(maxValue, z)))
        }
    }

    /// @dev Returns `x`, bounded to `minValue` and `maxValue`.
    function clamp(int256 x, int256 minValue, int256 maxValue) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := xor(x, mul(xor(x, minValue), sgt(minValue, x)))
            z := xor(z, mul(xor(z, maxValue), slt(maxValue, z)))
        }
    }

    /// @dev Returns greatest common divisor of `x` and `y`.
    function gcd(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            for { z := x } y {} {
                let t := y
                y := mod(z, y)
                z := t
            }
        }
    }

    /// @dev Returns `a + (b - a) * (t - begin) / (end - begin)`,
    /// with `t` clamped between `begin` and `end` (inclusive).
    /// Agnostic to the order of (`a`, `b`) and (`end`, `begin`).
    /// If `begins == end`, returns `t <= begin ? a : b`.
    function lerp(uint256 a, uint256 b, uint256 t, uint256 begin, uint256 end)
        internal
        pure
        returns (uint256)
    {
        if (begin > end) (t, begin, end) = (~t, ~begin, ~end);
        if (t <= begin) return a;
        if (t >= end) return b;
        unchecked {
            if (b >= a) return a + fullMulDiv(b - a, t - begin, end - begin);
            return a - fullMulDiv(a - b, t - begin, end - begin);
        }
    }

    /// @dev Returns `a + (b - a) * (t - begin) / (end - begin)`.
    /// with `t` clamped between `begin` and `end` (inclusive).
    /// Agnostic to the order of (`a`, `b`) and (`end`, `begin`).
    /// If `begins == end`, returns `t <= begin ? a : b`.
    function lerp(int256 a, int256 b, int256 t, int256 begin, int256 end)
        internal
        pure
        returns (int256)
    {
        if (begin > end) (t, begin, end) = (~t, ~begin, ~end);
        if (t <= begin) return a;
        if (t >= end) return b;
        // forgefmt: disable-next-item
        unchecked {
            if (b >= a) return int256(uint256(a) + fullMulDiv(uint256(b - a),
                uint256(t - begin), uint256(end - begin)));
            return int256(uint256(a) - fullMulDiv(uint256(a - b),
                uint256(t - begin), uint256(end - begin)));
        }
    }

    /// @dev Returns if `x` is an even number. Some people may need this.
    function isEven(uint256 x) internal pure returns (bool) {
        return x & uint256(1) == uint256(0);
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                   RAW NUMBER OPERATIONS                    */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns `x + y`, without checking for overflow.
    function rawAdd(uint256 x, uint256 y) internal pure returns (uint256 z) {
        unchecked {
            z = x + y;
        }
    }

    /// @dev Returns `x + y`, without checking for overflow.
    function rawAdd(int256 x, int256 y) internal pure returns (int256 z) {
        unchecked {
            z = x + y;
        }
    }

    /// @dev Returns `x - y`, without checking for underflow.
    function rawSub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        unchecked {
            z = x - y;
        }
    }

    /// @dev Returns `x - y`, without checking for underflow.
    function rawSub(int256 x, int256 y) internal pure returns (int256 z) {
        unchecked {
            z = x - y;
        }
    }

    /// @dev Returns `x * y`, without checking for overflow.
    function rawMul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        unchecked {
            z = x * y;
        }
    }

    /// @dev Returns `x * y`, without checking for overflow.
    function rawMul(int256 x, int256 y) internal pure returns (int256 z) {
        unchecked {
            z = x * y;
        }
    }

    /// @dev Returns `x / y`, returning 0 if `y` is zero.
    function rawDiv(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := div(x, y)
        }
    }

    /// @dev Returns `x / y`, returning 0 if `y` is zero.
    function rawSDiv(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := sdiv(x, y)
        }
    }

    /// @dev Returns `x % y`, returning 0 if `y` is zero.
    function rawMod(uint256 x, uint256 y) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mod(x, y)
        }
    }

    /// @dev Returns `x % y`, returning 0 if `y` is zero.
    function rawSMod(int256 x, int256 y) internal pure returns (int256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := smod(x, y)
        }
    }

    /// @dev Returns `(x + y) % d`, return 0 if `d` if zero.
    function rawAddMod(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := addmod(x, y, d)
        }
    }

    /// @dev Returns `(x * y) % d`, return 0 if `d` if zero.
    function rawMulMod(uint256 x, uint256 y, uint256 d) internal pure returns (uint256 z) {
        /// @solidity memory-safe-assembly
        assembly {
            z := mulmod(x, y, d)
        }
    }
}

File 19 of 31 : EnumerableSetLib.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/// @notice Library for managing enumerable sets in storage.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/EnumerableSetLib.sol)
///
/// @dev Note:
/// In many applications, the number of elements in an enumerable set is small.
/// This enumerable set implementation avoids storing the length and indices
/// for up to 3 elements. Once the length exceeds 3 for the first time, the length
/// and indices will be initialized. The amortized cost of adding elements is O(1).
///
/// The AddressSet implementation packs the length with the 0th entry.
///
/// All enumerable sets except Uint8Set use a pop and swap mechanism to remove elements.
/// This means that the iteration order of elements can change between element removals.
library EnumerableSetLib {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                       CUSTOM ERRORS                        */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev The index must be less than the length.
    error IndexOutOfBounds();

    /// @dev The value cannot be the zero sentinel.
    error ValueIsZeroSentinel();

    /// @dev Cannot accommodate a new unique value with the capacity.
    error ExceedsCapacity();

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                         CONSTANTS                          */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev A sentinel value to denote the zero value in storage.
    /// No elements can be equal to this value.
    /// `uint72(bytes9(keccak256(bytes("_ZERO_SENTINEL"))))`.
    uint256 private constant _ZERO_SENTINEL = 0xfbb67fda52d4bfb8bf;

    /// @dev The storage layout is given by:
    /// ```
    ///     mstore(0x04, _ENUMERABLE_ADDRESS_SET_SLOT_SEED)
    ///     mstore(0x00, set.slot)
    ///     let rootSlot := keccak256(0x00, 0x24)
    ///     mstore(0x20, rootSlot)
    ///     mstore(0x00, shr(96, shl(96, value)))
    ///     let positionSlot := keccak256(0x00, 0x40)
    ///     let valueSlot := add(rootSlot, sload(positionSlot))
    ///     let valueInStorage := shr(96, sload(valueSlot))
    ///     let lazyLength := shr(160, shl(160, sload(rootSlot)))
    /// ```
    uint256 private constant _ENUMERABLE_ADDRESS_SET_SLOT_SEED = 0x978aab92;

    /// @dev The storage layout is given by:
    /// ```
    ///     mstore(0x04, _ENUMERABLE_WORD_SET_SLOT_SEED)
    ///     mstore(0x00, set.slot)
    ///     let rootSlot := keccak256(0x00, 0x24)
    ///     mstore(0x20, rootSlot)
    ///     mstore(0x00, value)
    ///     let positionSlot := keccak256(0x00, 0x40)
    ///     let valueSlot := add(rootSlot, sload(positionSlot))
    ///     let valueInStorage := sload(valueSlot)
    ///     let lazyLength := sload(not(rootSlot))
    /// ```
    uint256 private constant _ENUMERABLE_WORD_SET_SLOT_SEED = 0x18fb5864;

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                          STRUCTS                           */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev An enumerable address set in storage.
    struct AddressSet {
        uint256 _spacer;
    }

    /// @dev An enumerable bytes32 set in storage.
    struct Bytes32Set {
        uint256 _spacer;
    }

    /// @dev An enumerable uint256 set in storage.
    struct Uint256Set {
        uint256 _spacer;
    }

    /// @dev An enumerable int256 set in storage.
    struct Int256Set {
        uint256 _spacer;
    }

    /// @dev An enumerable uint8 set in storage. Useful for enums.
    struct Uint8Set {
        uint256 data;
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                     GETTERS / SETTERS                      */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the number of elements in the set.
    function length(AddressSet storage set) internal view returns (uint256 result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            let rootPacked := sload(rootSlot)
            let n := shr(160, shl(160, rootPacked))
            result := shr(1, n)
            for {} iszero(or(iszero(shr(96, rootPacked)), n)) {} {
                result := 1
                if iszero(sload(add(rootSlot, result))) { break }
                result := 2
                if iszero(sload(add(rootSlot, result))) { break }
                result := 3
                break
            }
        }
    }

    /// @dev Returns the number of elements in the set.
    function length(Bytes32Set storage set) internal view returns (uint256 result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            let n := sload(not(rootSlot))
            result := shr(1, n)
            for {} iszero(n) {} {
                result := 0
                if iszero(sload(add(rootSlot, result))) { break }
                result := 1
                if iszero(sload(add(rootSlot, result))) { break }
                result := 2
                if iszero(sload(add(rootSlot, result))) { break }
                result := 3
                break
            }
        }
    }

    /// @dev Returns the number of elements in the set.
    function length(Uint256Set storage set) internal view returns (uint256 result) {
        result = length(_toBytes32Set(set));
    }

    /// @dev Returns the number of elements in the set.
    function length(Int256Set storage set) internal view returns (uint256 result) {
        result = length(_toBytes32Set(set));
    }

    /// @dev Returns the number of elements in the set.
    function length(Uint8Set storage set) internal view returns (uint256 result) {
        /// @solidity memory-safe-assembly
        assembly {
            for { let packed := sload(set.slot) } packed { result := add(1, result) } {
                packed := xor(packed, and(packed, add(1, not(packed))))
            }
        }
    }

    /// @dev Returns whether `value` is in the set.
    function contains(AddressSet storage set, address value) internal view returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            value := shr(96, shl(96, value))
            if eq(value, _ZERO_SENTINEL) {
                mstore(0x00, 0xf5a267f1) // `ValueIsZeroSentinel()`.
                revert(0x1c, 0x04)
            }
            if iszero(value) { value := _ZERO_SENTINEL }
            let rootPacked := sload(rootSlot)
            for {} 1 {} {
                if iszero(shr(160, shl(160, rootPacked))) {
                    result := 1
                    if eq(shr(96, rootPacked), value) { break }
                    if eq(shr(96, sload(add(rootSlot, 1))), value) { break }
                    if eq(shr(96, sload(add(rootSlot, 2))), value) { break }
                    result := 0
                    break
                }
                mstore(0x20, rootSlot)
                mstore(0x00, value)
                result := iszero(iszero(sload(keccak256(0x00, 0x40))))
                break
            }
        }
    }

    /// @dev Returns whether `value` is in the set.
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            if eq(value, _ZERO_SENTINEL) {
                mstore(0x00, 0xf5a267f1) // `ValueIsZeroSentinel()`.
                revert(0x1c, 0x04)
            }
            if iszero(value) { value := _ZERO_SENTINEL }
            for {} 1 {} {
                if iszero(sload(not(rootSlot))) {
                    result := 1
                    if eq(sload(rootSlot), value) { break }
                    if eq(sload(add(rootSlot, 1)), value) { break }
                    if eq(sload(add(rootSlot, 2)), value) { break }
                    result := 0
                    break
                }
                mstore(0x20, rootSlot)
                mstore(0x00, value)
                result := iszero(iszero(sload(keccak256(0x00, 0x40))))
                break
            }
        }
    }

    /// @dev Returns whether `value` is in the set.
    function contains(Uint256Set storage set, uint256 value) internal view returns (bool result) {
        result = contains(_toBytes32Set(set), bytes32(value));
    }

    /// @dev Returns whether `value` is in the set.
    function contains(Int256Set storage set, int256 value) internal view returns (bool result) {
        result = contains(_toBytes32Set(set), bytes32(uint256(value)));
    }

    /// @dev Returns whether `value` is in the set.
    function contains(Uint8Set storage set, uint8 value) internal view returns (bool result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := and(1, shr(and(0xff, value), sload(set.slot)))
        }
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    function add(AddressSet storage set, address value) internal returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            value := shr(96, shl(96, value))
            if eq(value, _ZERO_SENTINEL) {
                mstore(0x00, 0xf5a267f1) // `ValueIsZeroSentinel()`.
                revert(0x1c, 0x04)
            }
            if iszero(value) { value := _ZERO_SENTINEL }
            let rootPacked := sload(rootSlot)
            for { let n := shr(160, shl(160, rootPacked)) } 1 {} {
                mstore(0x20, rootSlot)
                if iszero(n) {
                    let v0 := shr(96, rootPacked)
                    if iszero(v0) {
                        sstore(rootSlot, shl(96, value))
                        result := 1
                        break
                    }
                    if eq(v0, value) { break }
                    let v1 := shr(96, sload(add(rootSlot, 1)))
                    if iszero(v1) {
                        sstore(add(rootSlot, 1), shl(96, value))
                        result := 1
                        break
                    }
                    if eq(v1, value) { break }
                    let v2 := shr(96, sload(add(rootSlot, 2)))
                    if iszero(v2) {
                        sstore(add(rootSlot, 2), shl(96, value))
                        result := 1
                        break
                    }
                    if eq(v2, value) { break }
                    mstore(0x00, v0)
                    sstore(keccak256(0x00, 0x40), 1)
                    mstore(0x00, v1)
                    sstore(keccak256(0x00, 0x40), 2)
                    mstore(0x00, v2)
                    sstore(keccak256(0x00, 0x40), 3)
                    rootPacked := or(rootPacked, 7)
                    n := 7
                }
                mstore(0x00, value)
                let p := keccak256(0x00, 0x40)
                if iszero(sload(p)) {
                    n := shr(1, n)
                    result := 1
                    sstore(p, add(1, n))
                    if iszero(n) {
                        sstore(rootSlot, or(3, shl(96, value)))
                        break
                    }
                    sstore(add(rootSlot, n), shl(96, value))
                    sstore(rootSlot, add(2, rootPacked))
                    break
                }
                break
            }
        }
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            if eq(value, _ZERO_SENTINEL) {
                mstore(0x00, 0xf5a267f1) // `ValueIsZeroSentinel()`.
                revert(0x1c, 0x04)
            }
            if iszero(value) { value := _ZERO_SENTINEL }
            for { let n := sload(not(rootSlot)) } 1 {} {
                mstore(0x20, rootSlot)
                if iszero(n) {
                    let v0 := sload(rootSlot)
                    if iszero(v0) {
                        sstore(rootSlot, value)
                        result := 1
                        break
                    }
                    if eq(v0, value) { break }
                    let v1 := sload(add(rootSlot, 1))
                    if iszero(v1) {
                        sstore(add(rootSlot, 1), value)
                        result := 1
                        break
                    }
                    if eq(v1, value) { break }
                    let v2 := sload(add(rootSlot, 2))
                    if iszero(v2) {
                        sstore(add(rootSlot, 2), value)
                        result := 1
                        break
                    }
                    if eq(v2, value) { break }
                    mstore(0x00, v0)
                    sstore(keccak256(0x00, 0x40), 1)
                    mstore(0x00, v1)
                    sstore(keccak256(0x00, 0x40), 2)
                    mstore(0x00, v2)
                    sstore(keccak256(0x00, 0x40), 3)
                    n := 7
                }
                mstore(0x00, value)
                let p := keccak256(0x00, 0x40)
                if iszero(sload(p)) {
                    n := shr(1, n)
                    sstore(add(rootSlot, n), value)
                    sstore(p, add(1, n))
                    sstore(not(rootSlot), or(1, shl(1, add(1, n))))
                    result := 1
                    break
                }
                break
            }
        }
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    function add(Uint256Set storage set, uint256 value) internal returns (bool result) {
        result = add(_toBytes32Set(set), bytes32(value));
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    function add(Int256Set storage set, int256 value) internal returns (bool result) {
        result = add(_toBytes32Set(set), bytes32(uint256(value)));
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    function add(Uint8Set storage set, uint8 value) internal returns (bool result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(set.slot)
            let mask := shl(and(0xff, value), 1)
            sstore(set.slot, or(result, mask))
            result := iszero(and(result, mask))
        }
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    /// Reverts if the set grows bigger than the custom on-the-fly capacity `cap`.
    function add(AddressSet storage set, address value, uint256 cap)
        internal
        returns (bool result)
    {
        if (result = add(set, value)) if (length(set) > cap) revert ExceedsCapacity();
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    /// Reverts if the set grows bigger than the custom on-the-fly capacity `cap`.
    function add(Bytes32Set storage set, bytes32 value, uint256 cap)
        internal
        returns (bool result)
    {
        if (result = add(set, value)) if (length(set) > cap) revert ExceedsCapacity();
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    /// Reverts if the set grows bigger than the custom on-the-fly capacity `cap`.
    function add(Uint256Set storage set, uint256 value, uint256 cap)
        internal
        returns (bool result)
    {
        if (result = add(set, value)) if (length(set) > cap) revert ExceedsCapacity();
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    /// Reverts if the set grows bigger than the custom on-the-fly capacity `cap`.
    function add(Int256Set storage set, int256 value, uint256 cap) internal returns (bool result) {
        if (result = add(set, value)) if (length(set) > cap) revert ExceedsCapacity();
    }

    /// @dev Adds `value` to the set. Returns whether `value` was not in the set.
    /// Reverts if the set grows bigger than the custom on-the-fly capacity `cap`.
    function add(Uint8Set storage set, uint8 value, uint256 cap) internal returns (bool result) {
        if (result = add(set, value)) if (length(set) > cap) revert ExceedsCapacity();
    }

    /// @dev Removes `value` from the set. Returns whether `value` was in the set.
    function remove(AddressSet storage set, address value) internal returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            value := shr(96, shl(96, value))
            if eq(value, _ZERO_SENTINEL) {
                mstore(0x00, 0xf5a267f1) // `ValueIsZeroSentinel()`.
                revert(0x1c, 0x04)
            }
            if iszero(value) { value := _ZERO_SENTINEL }
            let rootPacked := sload(rootSlot)
            for { let n := shr(160, shl(160, rootPacked)) } 1 {} {
                if iszero(n) {
                    result := 1
                    if eq(shr(96, rootPacked), value) {
                        sstore(rootSlot, sload(add(rootSlot, 1)))
                        sstore(add(rootSlot, 1), sload(add(rootSlot, 2)))
                        sstore(add(rootSlot, 2), 0)
                        break
                    }
                    if eq(shr(96, sload(add(rootSlot, 1))), value) {
                        sstore(add(rootSlot, 1), sload(add(rootSlot, 2)))
                        sstore(add(rootSlot, 2), 0)
                        break
                    }
                    if eq(shr(96, sload(add(rootSlot, 2))), value) {
                        sstore(add(rootSlot, 2), 0)
                        break
                    }
                    result := 0
                    break
                }
                mstore(0x20, rootSlot)
                mstore(0x00, value)
                let p := keccak256(0x00, 0x40)
                let position := sload(p)
                if iszero(position) { break }
                n := sub(shr(1, n), 1)
                if iszero(eq(sub(position, 1), n)) {
                    let lastValue := shr(96, sload(add(rootSlot, n)))
                    sstore(add(rootSlot, sub(position, 1)), shl(96, lastValue))
                    mstore(0x00, lastValue)
                    sstore(keccak256(0x00, 0x40), position)
                }
                sstore(rootSlot, or(shl(96, shr(96, sload(rootSlot))), or(shl(1, n), 1)))
                sstore(p, 0)
                result := 1
                break
            }
        }
    }

    /// @dev Removes `value` from the set. Returns whether `value` was in the set.
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            if eq(value, _ZERO_SENTINEL) {
                mstore(0x00, 0xf5a267f1) // `ValueIsZeroSentinel()`.
                revert(0x1c, 0x04)
            }
            if iszero(value) { value := _ZERO_SENTINEL }
            for { let n := sload(not(rootSlot)) } 1 {} {
                if iszero(n) {
                    result := 1
                    if eq(sload(rootSlot), value) {
                        sstore(rootSlot, sload(add(rootSlot, 1)))
                        sstore(add(rootSlot, 1), sload(add(rootSlot, 2)))
                        sstore(add(rootSlot, 2), 0)
                        break
                    }
                    if eq(sload(add(rootSlot, 1)), value) {
                        sstore(add(rootSlot, 1), sload(add(rootSlot, 2)))
                        sstore(add(rootSlot, 2), 0)
                        break
                    }
                    if eq(sload(add(rootSlot, 2)), value) {
                        sstore(add(rootSlot, 2), 0)
                        break
                    }
                    result := 0
                    break
                }
                mstore(0x20, rootSlot)
                mstore(0x00, value)
                let p := keccak256(0x00, 0x40)
                let position := sload(p)
                if iszero(position) { break }
                n := sub(shr(1, n), 1)
                if iszero(eq(sub(position, 1), n)) {
                    let lastValue := sload(add(rootSlot, n))
                    sstore(add(rootSlot, sub(position, 1)), lastValue)
                    mstore(0x00, lastValue)
                    sstore(keccak256(0x00, 0x40), position)
                }
                sstore(not(rootSlot), or(shl(1, n), 1))
                sstore(p, 0)
                result := 1
                break
            }
        }
    }

    /// @dev Removes `value` from the set. Returns whether `value` was in the set.
    function remove(Uint256Set storage set, uint256 value) internal returns (bool result) {
        result = remove(_toBytes32Set(set), bytes32(value));
    }

    /// @dev Removes `value` from the set. Returns whether `value` was in the set.
    function remove(Int256Set storage set, int256 value) internal returns (bool result) {
        result = remove(_toBytes32Set(set), bytes32(uint256(value)));
    }

    /// @dev Removes `value` from the set. Returns whether `value` was in the set.
    function remove(Uint8Set storage set, uint8 value) internal returns (bool result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(set.slot)
            let mask := shl(and(0xff, value), 1)
            sstore(set.slot, and(result, not(mask)))
            result := iszero(iszero(and(result, mask)))
        }
    }

    /// @dev Shorthand for `isAdd ? set.add(value, cap) : set.remove(value)`.
    function update(AddressSet storage set, address value, bool isAdd, uint256 cap)
        internal
        returns (bool)
    {
        return isAdd ? add(set, value, cap) : remove(set, value);
    }

    /// @dev Shorthand for `isAdd ? set.add(value, cap) : set.remove(value)`.
    function update(Bytes32Set storage set, bytes32 value, bool isAdd, uint256 cap)
        internal
        returns (bool)
    {
        return isAdd ? add(set, value, cap) : remove(set, value);
    }

    /// @dev Shorthand for `isAdd ? set.add(value, cap) : set.remove(value)`.
    function update(Uint256Set storage set, uint256 value, bool isAdd, uint256 cap)
        internal
        returns (bool)
    {
        return isAdd ? add(set, value, cap) : remove(set, value);
    }

    /// @dev Shorthand for `isAdd ? set.add(value, cap) : set.remove(value)`.
    function update(Int256Set storage set, int256 value, bool isAdd, uint256 cap)
        internal
        returns (bool)
    {
        return isAdd ? add(set, value, cap) : remove(set, value);
    }

    /// @dev Shorthand for `isAdd ? set.add(value, cap) : set.remove(value)`.
    function update(Uint8Set storage set, uint8 value, bool isAdd, uint256 cap)
        internal
        returns (bool)
    {
        return isAdd ? add(set, value, cap) : remove(set, value);
    }

    /// @dev Returns all of the values in the set.
    /// Note: This can consume more gas than the block gas limit for large sets.
    function values(AddressSet storage set) internal view returns (address[] memory result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            let zs := _ZERO_SENTINEL
            let rootPacked := sload(rootSlot)
            let n := shr(160, shl(160, rootPacked))
            result := mload(0x40)
            let o := add(0x20, result)
            let v := shr(96, rootPacked)
            mstore(o, mul(v, iszero(eq(v, zs))))
            for {} 1 {} {
                if iszero(n) {
                    if v {
                        n := 1
                        v := shr(96, sload(add(rootSlot, n)))
                        if v {
                            n := 2
                            mstore(add(o, 0x20), mul(v, iszero(eq(v, zs))))
                            v := shr(96, sload(add(rootSlot, n)))
                            if v {
                                n := 3
                                mstore(add(o, 0x40), mul(v, iszero(eq(v, zs))))
                            }
                        }
                    }
                    break
                }
                n := shr(1, n)
                for { let i := 1 } lt(i, n) { i := add(i, 1) } {
                    v := shr(96, sload(add(rootSlot, i)))
                    mstore(add(o, shl(5, i)), mul(v, iszero(eq(v, zs))))
                }
                break
            }
            mstore(result, n)
            mstore(0x40, add(o, shl(5, n)))
        }
    }

    /// @dev Returns all of the values in the set.
    /// Note: This can consume more gas than the block gas limit for large sets.
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            let zs := _ZERO_SENTINEL
            let n := sload(not(rootSlot))
            result := mload(0x40)
            let o := add(0x20, result)
            for {} 1 {} {
                if iszero(n) {
                    let v := sload(rootSlot)
                    if v {
                        n := 1
                        mstore(o, mul(v, iszero(eq(v, zs))))
                        v := sload(add(rootSlot, n))
                        if v {
                            n := 2
                            mstore(add(o, 0x20), mul(v, iszero(eq(v, zs))))
                            v := sload(add(rootSlot, n))
                            if v {
                                n := 3
                                mstore(add(o, 0x40), mul(v, iszero(eq(v, zs))))
                            }
                        }
                    }
                    break
                }
                n := shr(1, n)
                for { let i := 0 } lt(i, n) { i := add(i, 1) } {
                    let v := sload(add(rootSlot, i))
                    mstore(add(o, shl(5, i)), mul(v, iszero(eq(v, zs))))
                }
                break
            }
            mstore(result, n)
            mstore(0x40, add(o, shl(5, n)))
        }
    }

    /// @dev Returns all of the values in the set.
    /// Note: This can consume more gas than the block gas limit for large sets.
    function values(Uint256Set storage set) internal view returns (uint256[] memory result) {
        result = _toUints(values(_toBytes32Set(set)));
    }

    /// @dev Returns all of the values in the set.
    /// Note: This can consume more gas than the block gas limit for large sets.
    function values(Int256Set storage set) internal view returns (int256[] memory result) {
        result = _toInts(values(_toBytes32Set(set)));
    }

    /// @dev Returns all of the values in the set.
    function values(Uint8Set storage set) internal view returns (uint8[] memory result) {
        /// @solidity memory-safe-assembly
        assembly {
            result := mload(0x40)
            let ptr := add(result, 0x20)
            let o := 0
            for { let packed := sload(set.slot) } packed {} {
                if iszero(and(packed, 0xffff)) {
                    o := add(o, 16)
                    packed := shr(16, packed)
                    continue
                }
                mstore(ptr, o)
                ptr := add(ptr, shl(5, and(packed, 1)))
                o := add(o, 1)
                packed := shr(1, packed)
            }
            mstore(result, shr(5, sub(ptr, add(result, 0x20))))
            mstore(0x40, ptr)
        }
    }

    /// @dev Returns the element at index `i` in the set. Reverts if `i` is out-of-bounds.
    function at(AddressSet storage set, uint256 i) internal view returns (address result) {
        bytes32 rootSlot = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            result := shr(96, sload(add(rootSlot, i)))
            result := mul(result, iszero(eq(result, _ZERO_SENTINEL)))
        }
        if (i >= length(set)) revert IndexOutOfBounds();
    }

    /// @dev Returns the element at index `i` in the set. Reverts if `i` is out-of-bounds.
    function at(Bytes32Set storage set, uint256 i) internal view returns (bytes32 result) {
        result = _rootSlot(set);
        /// @solidity memory-safe-assembly
        assembly {
            result := sload(add(result, i))
            result := mul(result, iszero(eq(result, _ZERO_SENTINEL)))
        }
        if (i >= length(set)) revert IndexOutOfBounds();
    }

    /// @dev Returns the element at index `i` in the set. Reverts if `i` is out-of-bounds.
    function at(Uint256Set storage set, uint256 i) internal view returns (uint256 result) {
        result = uint256(at(_toBytes32Set(set), i));
    }

    /// @dev Returns the element at index `i` in the set. Reverts if `i` is out-of-bounds.
    function at(Int256Set storage set, uint256 i) internal view returns (int256 result) {
        result = int256(uint256(at(_toBytes32Set(set), i)));
    }

    /// @dev Returns the element at index `i` in the set. Reverts if `i` is out-of-bounds.
    function at(Uint8Set storage set, uint256 i) internal view returns (uint8 result) {
        /// @solidity memory-safe-assembly
        assembly {
            let packed := sload(set.slot)
            for {} 1 {
                mstore(0x00, 0x4e23d035) // `IndexOutOfBounds()`.
                revert(0x1c, 0x04)
            } {
                if iszero(lt(i, 256)) { continue }
                for { let j := 0 } iszero(eq(i, j)) {} {
                    packed := xor(packed, and(packed, add(1, not(packed))))
                    j := add(j, 1)
                }
                if iszero(packed) { continue }
                break
            }
            // Find first set subroutine, optimized for smaller bytecode size.
            let x := and(packed, add(1, not(packed)))
            let r := shl(7, iszero(iszero(shr(128, x))))
            r := or(r, shl(6, iszero(iszero(shr(64, shr(r, x))))))
            r := or(r, shl(5, lt(0xffffffff, shr(r, x))))
            // For the lower 5 bits of the result, use a De Bruijn lookup.
            // forgefmt: disable-next-item
            result := or(r, byte(and(div(0xd76453e0, shr(r, x)), 0x1f),
                0x001f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405))
        }
    }

    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /*                      PRIVATE HELPERS                       */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/

    /// @dev Returns the root slot.
    function _rootSlot(AddressSet storage s) private pure returns (bytes32 r) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x04, _ENUMERABLE_ADDRESS_SET_SLOT_SEED)
            mstore(0x00, s.slot)
            r := keccak256(0x00, 0x24)
        }
    }

    /// @dev Returns the root slot.
    function _rootSlot(Bytes32Set storage s) private pure returns (bytes32 r) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x04, _ENUMERABLE_WORD_SET_SLOT_SEED)
            mstore(0x00, s.slot)
            r := keccak256(0x00, 0x24)
        }
    }

    /// @dev Casts to a Bytes32Set.
    function _toBytes32Set(Uint256Set storage s) private pure returns (Bytes32Set storage c) {
        /// @solidity memory-safe-assembly
        assembly {
            c.slot := s.slot
        }
    }

    /// @dev Casts to a Bytes32Set.
    function _toBytes32Set(Int256Set storage s) private pure returns (Bytes32Set storage c) {
        /// @solidity memory-safe-assembly
        assembly {
            c.slot := s.slot
        }
    }

    /// @dev Casts to a uint256 array.
    function _toUints(bytes32[] memory a) private pure returns (uint256[] memory c) {
        /// @solidity memory-safe-assembly
        assembly {
            c := a
        }
    }

    /// @dev Casts to a int256 array.
    function _toInts(bytes32[] memory a) private pure returns (int256[] memory c) {
        /// @solidity memory-safe-assembly
        assembly {
            c := a
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC-721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
     *   {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the address zero.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (utils/cryptography/MessageHashUtils.sol)

pragma solidity ^0.8.20;

import {Strings} from "../Strings.sol";

/**
 * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.
 *
 * The library provides methods for generating a hash of a message that conforms to the
 * https://eips.ethereum.org/EIPS/eip-191[ERC-191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]
 * specifications.
 */
library MessageHashUtils {
    /**
     * @dev Returns the keccak256 digest of an ERC-191 signed data with version
     * `0x45` (`personal_sign` messages).
     *
     * The digest is calculated by prefixing a bytes32 `messageHash` with
     * `"\x19Ethereum Signed Message:\n32"` and hashing the result. It corresponds with the
     * hash signed when using the https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sign[`eth_sign`] JSON-RPC method.
     *
     * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with
     * keccak256, although any bytes32 value can be safely used because the final digest will
     * be re-hashed.
     *
     * See {ECDSA-recover}.
     */
    function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {
        assembly ("memory-safe") {
            mstore(0x00, "\x19Ethereum Signed Message:\n32") // 32 is the bytes-length of messageHash
            mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix
            digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)
        }
    }

    /**
     * @dev Returns the keccak256 digest of an ERC-191 signed data with version
     * `0x45` (`personal_sign` messages).
     *
     * The digest is calculated by prefixing an arbitrary `message` with
     * `"\x19Ethereum Signed Message:\n" + len(message)` and hashing the result. It corresponds with the
     * hash signed when using the https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sign[`eth_sign`] JSON-RPC method.
     *
     * See {ECDSA-recover}.
     */
    function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {
        return
            keccak256(bytes.concat("\x19Ethereum Signed Message:\n", bytes(Strings.toString(message.length)), message));
    }

    /**
     * @dev Returns the keccak256 digest of an ERC-191 signed data with version
     * `0x00` (data with intended validator).
     *
     * The digest is calculated by prefixing an arbitrary `data` with `"\x19\x00"` and the intended
     * `validator` address. Then hashing the result.
     *
     * See {ECDSA-recover}.
     */
    function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(hex"19_00", validator, data));
    }

    /**
     * @dev Variant of {toDataWithIntendedValidatorHash-address-bytes} optimized for cases where `data` is a bytes32.
     */
    function toDataWithIntendedValidatorHash(
        address validator,
        bytes32 messageHash
    ) internal pure returns (bytes32 digest) {
        assembly ("memory-safe") {
            mstore(0x00, hex"19_00")
            mstore(0x02, shl(96, validator))
            mstore(0x16, messageHash)
            digest := keccak256(0x00, 0x36)
        }
    }

    /**
     * @dev Returns the keccak256 digest of an EIP-712 typed data (ERC-191 version `0x01`).
     *
     * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with
     * `\x19\x01` and hashing the result. It corresponds to the hash signed by the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.
     *
     * See {ECDSA-recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {
        assembly ("memory-safe") {
            let ptr := mload(0x40)
            mstore(ptr, hex"19_01")
            mstore(add(ptr, 0x02), domainSeparator)
            mstore(add(ptr, 0x22), structHash)
            digest := keccak256(ptr, 0x42)
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.20;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS
    }

    /**
     * @dev The signature derives the `address(0)`.
     */
    error ECDSAInvalidSignature();

    /**
     * @dev The signature has an invalid length.
     */
    error ECDSAInvalidSignatureLength(uint256 length);

    /**
     * @dev The signature has an S value that is in the upper half order.
     */
    error ECDSAInvalidSignatureS(bytes32 s);

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
     * return address(0) without also returning an error description. Errors are documented using an enum (error type)
     * and a bytes32 providing additional information about the error.
     *
     * If no error is returned, then the address can be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     */
    function tryRecover(
        bytes32 hash,
        bytes memory signature
    ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly ("memory-safe") {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
        unchecked {
            bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
            // We do not check for an overflow here since the shift operation results in 0 or 1.
            uint8 v = uint8((uint256(vs) >> 255) + 27);
            return tryRecover(hash, v, r, s);
        }
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     */
    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS, s);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature, bytes32(0));
        }

        return (signer, RecoverError.NoError, bytes32(0));
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
        _throwError(error, errorArg);
        return recovered;
    }

    /**
     * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
     */
    function _throwError(RecoverError error, bytes32 errorArg) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert ECDSAInvalidSignature();
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert ECDSAInvalidSignatureLength(uint256(errorArg));
        } else if (error == RecoverError.InvalidSignatureS) {
            revert ECDSAInvalidSignatureS(errorArg);
        }
    }
}

File 24 of 31 : Enums.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

enum CrewType { 
    None, 
    NFT, 
    Fungible 
}

enum RelicSource {
   Unknown, 
   Bought,
   Claimed
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (utils/Strings.sol)

pragma solidity ^0.8.20;

import {Math} from "./math/Math.sol";
import {SafeCast} from "./math/SafeCast.sol";
import {SignedMath} from "./math/SignedMath.sol";

/**
 * @dev String operations.
 */
library Strings {
    using SafeCast for *;

    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;
    uint256 private constant SPECIAL_CHARS_LOOKUP =
        (1 << 0x08) | // backspace
            (1 << 0x09) | // tab
            (1 << 0x0a) | // newline
            (1 << 0x0c) | // form feed
            (1 << 0x0d) | // carriage return
            (1 << 0x22) | // double quote
            (1 << 0x5c); // backslash

    /**
     * @dev The `value` string doesn't fit in the specified `length`.
     */
    error StringsInsufficientHexLength(uint256 value, uint256 length);

    /**
     * @dev The string being parsed contains characters that are not in scope of the given base.
     */
    error StringsInvalidChar();

    /**
     * @dev The string being parsed is not a properly formatted address.
     */
    error StringsInvalidAddressFormat();

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            assembly ("memory-safe") {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                assembly ("memory-safe") {
                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `int256` to its ASCII `string` decimal representation.
     */
    function toStringSigned(int256 value) internal pure returns (string memory) {
        return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        uint256 localValue = value;
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = HEX_DIGITS[localValue & 0xf];
            localValue >>= 4;
        }
        if (localValue != 0) {
            revert StringsInsufficientHexLength(value, length);
        }
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal
     * representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal
     * representation, according to EIP-55.
     */
    function toChecksumHexString(address addr) internal pure returns (string memory) {
        bytes memory buffer = bytes(toHexString(addr));

        // hash the hex part of buffer (skip length + 2 bytes, length 40)
        uint256 hashValue;
        assembly ("memory-safe") {
            hashValue := shr(96, keccak256(add(buffer, 0x22), 40))
        }

        for (uint256 i = 41; i > 1; --i) {
            // possible values for buffer[i] are 48 (0) to 57 (9) and 97 (a) to 102 (f)
            if (hashValue & 0xf > 7 && uint8(buffer[i]) > 96) {
                // case shift by xoring with 0x20
                buffer[i] ^= 0x20;
            }
            hashValue >>= 4;
        }
        return string(buffer);
    }

    /**
     * @dev Returns true if the two strings are equal.
     */
    function equal(string memory a, string memory b) internal pure returns (bool) {
        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
    }

    /**
     * @dev Parse a decimal string and returns the value as a `uint256`.
     *
     * Requirements:
     * - The string must be formatted as `[0-9]*`
     * - The result must fit into an `uint256` type
     */
    function parseUint(string memory input) internal pure returns (uint256) {
        return parseUint(input, 0, bytes(input).length);
    }

    /**
     * @dev Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and
     * `end` (excluded).
     *
     * Requirements:
     * - The substring must be formatted as `[0-9]*`
     * - The result must fit into an `uint256` type
     */
    function parseUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {
        (bool success, uint256 value) = tryParseUint(input, begin, end);
        if (!success) revert StringsInvalidChar();
        return value;
    }

    /**
     * @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.
     *
     * NOTE: This function will revert if the result does not fit in a `uint256`.
     */
    function tryParseUint(string memory input) internal pure returns (bool success, uint256 value) {
        return _tryParseUintUncheckedBounds(input, 0, bytes(input).length);
    }

    /**
     * @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid
     * character.
     *
     * NOTE: This function will revert if the result does not fit in a `uint256`.
     */
    function tryParseUint(
        string memory input,
        uint256 begin,
        uint256 end
    ) internal pure returns (bool success, uint256 value) {
        if (end > bytes(input).length || begin > end) return (false, 0);
        return _tryParseUintUncheckedBounds(input, begin, end);
    }

    /**
     * @dev Implementation of {tryParseUint-string-uint256-uint256} that does not check bounds. Caller should make sure that
     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.
     */
    function _tryParseUintUncheckedBounds(
        string memory input,
        uint256 begin,
        uint256 end
    ) private pure returns (bool success, uint256 value) {
        bytes memory buffer = bytes(input);

        uint256 result = 0;
        for (uint256 i = begin; i < end; ++i) {
            uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));
            if (chr > 9) return (false, 0);
            result *= 10;
            result += chr;
        }
        return (true, result);
    }

    /**
     * @dev Parse a decimal string and returns the value as a `int256`.
     *
     * Requirements:
     * - The string must be formatted as `[-+]?[0-9]*`
     * - The result must fit in an `int256` type.
     */
    function parseInt(string memory input) internal pure returns (int256) {
        return parseInt(input, 0, bytes(input).length);
    }

    /**
     * @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and
     * `end` (excluded).
     *
     * Requirements:
     * - The substring must be formatted as `[-+]?[0-9]*`
     * - The result must fit in an `int256` type.
     */
    function parseInt(string memory input, uint256 begin, uint256 end) internal pure returns (int256) {
        (bool success, int256 value) = tryParseInt(input, begin, end);
        if (!success) revert StringsInvalidChar();
        return value;
    }

    /**
     * @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if
     * the result does not fit in a `int256`.
     *
     * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.
     */
    function tryParseInt(string memory input) internal pure returns (bool success, int256 value) {
        return _tryParseIntUncheckedBounds(input, 0, bytes(input).length);
    }

    uint256 private constant ABS_MIN_INT256 = 2 ** 255;

    /**
     * @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid
     * character or if the result does not fit in a `int256`.
     *
     * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.
     */
    function tryParseInt(
        string memory input,
        uint256 begin,
        uint256 end
    ) internal pure returns (bool success, int256 value) {
        if (end > bytes(input).length || begin > end) return (false, 0);
        return _tryParseIntUncheckedBounds(input, begin, end);
    }

    /**
     * @dev Implementation of {tryParseInt-string-uint256-uint256} that does not check bounds. Caller should make sure that
     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.
     */
    function _tryParseIntUncheckedBounds(
        string memory input,
        uint256 begin,
        uint256 end
    ) private pure returns (bool success, int256 value) {
        bytes memory buffer = bytes(input);

        // Check presence of a negative sign.
        bytes1 sign = begin == end ? bytes1(0) : bytes1(_unsafeReadBytesOffset(buffer, begin)); // don't do out-of-bound (possibly unsafe) read if sub-string is empty
        bool positiveSign = sign == bytes1("+");
        bool negativeSign = sign == bytes1("-");
        uint256 offset = (positiveSign || negativeSign).toUint();

        (bool absSuccess, uint256 absValue) = tryParseUint(input, begin + offset, end);

        if (absSuccess && absValue < ABS_MIN_INT256) {
            return (true, negativeSign ? -int256(absValue) : int256(absValue));
        } else if (absSuccess && negativeSign && absValue == ABS_MIN_INT256) {
            return (true, type(int256).min);
        } else return (false, 0);
    }

    /**
     * @dev Parse a hexadecimal string (with or without "0x" prefix), and returns the value as a `uint256`.
     *
     * Requirements:
     * - The string must be formatted as `(0x)?[0-9a-fA-F]*`
     * - The result must fit in an `uint256` type.
     */
    function parseHexUint(string memory input) internal pure returns (uint256) {
        return parseHexUint(input, 0, bytes(input).length);
    }

    /**
     * @dev Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and
     * `end` (excluded).
     *
     * Requirements:
     * - The substring must be formatted as `(0x)?[0-9a-fA-F]*`
     * - The result must fit in an `uint256` type.
     */
    function parseHexUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {
        (bool success, uint256 value) = tryParseHexUint(input, begin, end);
        if (!success) revert StringsInvalidChar();
        return value;
    }

    /**
     * @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.
     *
     * NOTE: This function will revert if the result does not fit in a `uint256`.
     */
    function tryParseHexUint(string memory input) internal pure returns (bool success, uint256 value) {
        return _tryParseHexUintUncheckedBounds(input, 0, bytes(input).length);
    }

    /**
     * @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an
     * invalid character.
     *
     * NOTE: This function will revert if the result does not fit in a `uint256`.
     */
    function tryParseHexUint(
        string memory input,
        uint256 begin,
        uint256 end
    ) internal pure returns (bool success, uint256 value) {
        if (end > bytes(input).length || begin > end) return (false, 0);
        return _tryParseHexUintUncheckedBounds(input, begin, end);
    }

    /**
     * @dev Implementation of {tryParseHexUint-string-uint256-uint256} that does not check bounds. Caller should make sure that
     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.
     */
    function _tryParseHexUintUncheckedBounds(
        string memory input,
        uint256 begin,
        uint256 end
    ) private pure returns (bool success, uint256 value) {
        bytes memory buffer = bytes(input);

        // skip 0x prefix if present
        bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(buffer, begin)) == bytes2("0x"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty
        uint256 offset = hasPrefix.toUint() * 2;

        uint256 result = 0;
        for (uint256 i = begin + offset; i < end; ++i) {
            uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));
            if (chr > 15) return (false, 0);
            result *= 16;
            unchecked {
                // Multiplying by 16 is equivalent to a shift of 4 bits (with additional overflow check).
                // This guarantees that adding a value < 16 will not cause an overflow, hence the unchecked.
                result += chr;
            }
        }
        return (true, result);
    }

    /**
     * @dev Parse a hexadecimal string (with or without "0x" prefix), and returns the value as an `address`.
     *
     * Requirements:
     * - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`
     */
    function parseAddress(string memory input) internal pure returns (address) {
        return parseAddress(input, 0, bytes(input).length);
    }

    /**
     * @dev Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and
     * `end` (excluded).
     *
     * Requirements:
     * - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`
     */
    function parseAddress(string memory input, uint256 begin, uint256 end) internal pure returns (address) {
        (bool success, address value) = tryParseAddress(input, begin, end);
        if (!success) revert StringsInvalidAddressFormat();
        return value;
    }

    /**
     * @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly
     * formatted address. See {parseAddress-string} requirements.
     */
    function tryParseAddress(string memory input) internal pure returns (bool success, address value) {
        return tryParseAddress(input, 0, bytes(input).length);
    }

    /**
     * @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly
     * formatted address. See {parseAddress-string-uint256-uint256} requirements.
     */
    function tryParseAddress(
        string memory input,
        uint256 begin,
        uint256 end
    ) internal pure returns (bool success, address value) {
        if (end > bytes(input).length || begin > end) return (false, address(0));

        bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(bytes(input), begin)) == bytes2("0x"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty
        uint256 expectedLength = 40 + hasPrefix.toUint() * 2;

        // check that input is the correct length
        if (end - begin == expectedLength) {
            // length guarantees that this does not overflow, and value is at most type(uint160).max
            (bool s, uint256 v) = _tryParseHexUintUncheckedBounds(input, begin, end);
            return (s, address(uint160(v)));
        } else {
            return (false, address(0));
        }
    }

    function _tryParseChr(bytes1 chr) private pure returns (uint8) {
        uint8 value = uint8(chr);

        // Try to parse `chr`:
        // - Case 1: [0-9]
        // - Case 2: [a-f]
        // - Case 3: [A-F]
        // - otherwise not supported
        unchecked {
            if (value > 47 && value < 58) value -= 48;
            else if (value > 96 && value < 103) value -= 87;
            else if (value > 64 && value < 71) value -= 55;
            else return type(uint8).max;
        }

        return value;
    }

    /**
     * @dev Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.
     *
     * WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.
     *
     * NOTE: This function escapes all unicode characters, and not just the ones in ranges defined in section 2.5 of
     * RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). ECMAScript's `JSON.parse` does recover escaped unicode
     * characters that are not in this range, but other tooling may provide different results.
     */
    function escapeJSON(string memory input) internal pure returns (string memory) {
        bytes memory buffer = bytes(input);
        bytes memory output = new bytes(2 * buffer.length); // worst case scenario
        uint256 outputLength = 0;

        for (uint256 i; i < buffer.length; ++i) {
            bytes1 char = bytes1(_unsafeReadBytesOffset(buffer, i));
            if (((SPECIAL_CHARS_LOOKUP & (1 << uint8(char))) != 0)) {
                output[outputLength++] = "\\";
                if (char == 0x08) output[outputLength++] = "b";
                else if (char == 0x09) output[outputLength++] = "t";
                else if (char == 0x0a) output[outputLength++] = "n";
                else if (char == 0x0c) output[outputLength++] = "f";
                else if (char == 0x0d) output[outputLength++] = "r";
                else if (char == 0x5c) output[outputLength++] = "\\";
                else if (char == 0x22) {
                    // solhint-disable-next-line quotes
                    output[outputLength++] = '"';
                }
            } else {
                output[outputLength++] = char;
            }
        }
        // write the actual length and deallocate unused memory
        assembly ("memory-safe") {
            mstore(output, outputLength)
            mstore(0x40, add(output, shl(5, shr(5, add(outputLength, 63)))))
        }

        return string(output);
    }

    /**
     * @dev Reads a bytes32 from a bytes array without bounds checking.
     *
     * NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the
     * assembly block as such would prevent some optimizations.
     */
    function _unsafeReadBytesOffset(bytes memory buffer, uint256 offset) private pure returns (bytes32 value) {
        // This is not memory safe in the general case, but all calls to this private function are within bounds.
        assembly ("memory-safe") {
            value := mload(add(buffer, add(0x20, offset)))
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)

pragma solidity ^0.8.20;

import {SafeCast} from "./SafeCast.sol";

/**
 * @dev Standard signed math utilities missing in the Solidity language.
 */
library SignedMath {
    /**
     * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.
     *
     * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.
     * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute
     * one branch when needed, making this function more expensive.
     */
    function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {
        unchecked {
            // branchless ternary works because:
            // b ^ (a ^ b) == a
            // b ^ 0 == b
            return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));
        }
    }

    /**
     * @dev Returns the largest of two signed numbers.
     */
    function max(int256 a, int256 b) internal pure returns (int256) {
        return ternary(a > b, a, b);
    }

    /**
     * @dev Returns the smallest of two signed numbers.
     */
    function min(int256 a, int256 b) internal pure returns (int256) {
        return ternary(a < b, a, b);
    }

    /**
     * @dev Returns the average of two signed numbers without overflow.
     * The result is rounded towards zero.
     */
    function average(int256 a, int256 b) internal pure returns (int256) {
        // Formula from the book "Hacker's Delight"
        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    /**
     * @dev Returns the absolute unsigned value of a signed value.
     */
    function abs(int256 n) internal pure returns (uint256) {
        unchecked {
            // Formula from the "Bit Twiddling Hacks" by Sean Eron Anderson.
            // Since `n` is a signed integer, the generated bytecode will use the SAR opcode to perform the right shift,
            // taking advantage of the most significant (or "sign" bit) in two's complement representation.
            // This opcode adds new most significant bits set to the value of the previous most significant bit. As a result,
            // the mask will either be `bytes32(0)` (if n is positive) or `~bytes32(0)` (if n is negative).
            int256 mask = n >> 255;

            // A `bytes32(0)` mask leaves the input unchanged, while a `~bytes32(0)` mask complements it.
            return uint256((n + mask) ^ mask);
        }
    }
}

File 29 of 31 : Math.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (utils/math/Math.sol)

pragma solidity ^0.8.20;

import {Panic} from "../Panic.sol";
import {SafeCast} from "./SafeCast.sol";

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    enum Rounding {
        Floor, // Toward negative infinity
        Ceil, // Toward positive infinity
        Trunc, // Toward zero
        Expand // Away from zero
    }

    /**
     * @dev Return the 512-bit addition of two uint256.
     *
     * The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low.
     */
    function add512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {
        assembly ("memory-safe") {
            low := add(a, b)
            high := lt(low, a)
        }
    }

    /**
     * @dev Return the 512-bit multiplication of two uint256.
     *
     * The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low.
     */
    function mul512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {
        // 512-bit multiply [high low] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use
        // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
        // variables such that product = high * 2²⁵⁶ + low.
        assembly ("memory-safe") {
            let mm := mulmod(a, b, not(0))
            low := mul(a, b)
            high := sub(sub(mm, low), lt(mm, low))
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, with a success flag (no overflow).
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            uint256 c = a + b;
            success = c >= a;
            result = c * SafeCast.toUint(success);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow).
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            uint256 c = a - b;
            success = c <= a;
            result = c * SafeCast.toUint(success);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow).
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            uint256 c = a * b;
            assembly ("memory-safe") {
                // Only true when the multiplication doesn't overflow
                // (c / a == b) || (a == 0)
                success := or(eq(div(c, a), b), iszero(a))
            }
            // equivalent to: success ? c : 0
            result = c * SafeCast.toUint(success);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            success = b > 0;
            assembly ("memory-safe") {
                // The `DIV` opcode returns zero when the denominator is 0.
                result := div(a, b)
            }
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
        unchecked {
            success = b > 0;
            assembly ("memory-safe") {
                // The `MOD` opcode returns zero when the denominator is 0.
                result := mod(a, b)
            }
        }
    }

    /**
     * @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing.
     */
    function saturatingAdd(uint256 a, uint256 b) internal pure returns (uint256) {
        (bool success, uint256 result) = tryAdd(a, b);
        return ternary(success, result, type(uint256).max);
    }

    /**
     * @dev Unsigned saturating subtraction, bounds to zero instead of overflowing.
     */
    function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {
        (, uint256 result) = trySub(a, b);
        return result;
    }

    /**
     * @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing.
     */
    function saturatingMul(uint256 a, uint256 b) internal pure returns (uint256) {
        (bool success, uint256 result) = tryMul(a, b);
        return ternary(success, result, type(uint256).max);
    }

    /**
     * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.
     *
     * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.
     * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute
     * one branch when needed, making this function more expensive.
     */
    function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {
        unchecked {
            // branchless ternary works because:
            // b ^ (a ^ b) == a
            // b ^ 0 == b
            return b ^ ((a ^ b) * SafeCast.toUint(condition));
        }
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return ternary(a > b, a, b);
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return ternary(a < b, a, b);
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds towards infinity instead
     * of rounding towards zero.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        if (b == 0) {
            // Guarantee the same behavior as in a regular Solidity division.
            Panic.panic(Panic.DIVISION_BY_ZERO);
        }

        // The following calculation ensures accurate ceiling division without overflow.
        // Since a is non-zero, (a - 1) / b will not overflow.
        // The largest possible result occurs when (a - 1) / b is type(uint256).max,
        // but the largest value we can obtain is type(uint256).max - 1, which happens
        // when a = type(uint256).max and b = 1.
        unchecked {
            return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);
        }
    }

    /**
     * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or
     * denominator == 0.
     *
     * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by
     * Uniswap Labs also under MIT license.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {
            (uint256 high, uint256 low) = mul512(x, y);

            // Handle non-overflow cases, 256 by 256 division.
            if (high == 0) {
                // Solidity will revert if denominator == 0, unlike the div opcode on its own.
                // The surrounding unchecked block does not change this fact.
                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
                return low / denominator;
            }

            // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.
            if (denominator <= high) {
                Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));
            }

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [high low].
            uint256 remainder;
            assembly ("memory-safe") {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                high := sub(high, gt(remainder, low))
                low := sub(low, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.
            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.

            uint256 twos = denominator & (0 - denominator);
            assembly ("memory-safe") {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [high low] by twos.
                low := div(low, twos)

                // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from high into low.
            low |= high * twos;

            // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such
            // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv ≡ 1 mod 2⁴.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
            // works in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2⁸
            inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶
            inverse *= 2 - denominator * inverse; // inverse mod 2³²
            inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴
            inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸
            inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is
            // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and high
            // is no longer required.
            result = low * inverse;
            return result;
        }
    }

    /**
     * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);
    }

    /**
     * @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.
     */
    function mulShr(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 result) {
        unchecked {
            (uint256 high, uint256 low) = mul512(x, y);
            if (high >= 1 << n) {
                Panic.panic(Panic.UNDER_OVERFLOW);
            }
            return (high << (256 - n)) | (low >> n);
        }
    }

    /**
     * @dev Calculates x * y >> n with full precision, following the selected rounding direction.
     */
    function mulShr(uint256 x, uint256 y, uint8 n, Rounding rounding) internal pure returns (uint256) {
        return mulShr(x, y, n) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, 1 << n) > 0);
    }

    /**
     * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.
     *
     * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.
     * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.
     *
     * If the input value is not inversible, 0 is returned.
     *
     * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the
     * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.
     */
    function invMod(uint256 a, uint256 n) internal pure returns (uint256) {
        unchecked {
            if (n == 0) return 0;

            // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)
            // Used to compute integers x and y such that: ax + ny = gcd(a, n).
            // When the gcd is 1, then the inverse of a modulo n exists and it's x.
            // ax + ny = 1
            // ax = 1 + (-y)n
            // ax ≡ 1 (mod n) # x is the inverse of a modulo n

            // If the remainder is 0 the gcd is n right away.
            uint256 remainder = a % n;
            uint256 gcd = n;

            // Therefore the initial coefficients are:
            // ax + ny = gcd(a, n) = n
            // 0a + 1n = n
            int256 x = 0;
            int256 y = 1;

            while (remainder != 0) {
                uint256 quotient = gcd / remainder;

                (gcd, remainder) = (
                    // The old remainder is the next gcd to try.
                    remainder,
                    // Compute the next remainder.
                    // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd
                    // where gcd is at most n (capped to type(uint256).max)
                    gcd - remainder * quotient
                );

                (x, y) = (
                    // Increment the coefficient of a.
                    y,
                    // Decrement the coefficient of n.
                    // Can overflow, but the result is casted to uint256 so that the
                    // next value of y is "wrapped around" to a value between 0 and n - 1.
                    x - y * int256(quotient)
                );
            }

            if (gcd != 1) return 0; // No inverse exists.
            return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.
        }
    }

    /**
     * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.
     *
     * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is
     * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that
     * `a**(p-2)` is the modular multiplicative inverse of a in Fp.
     *
     * NOTE: this function does NOT check that `p` is a prime greater than `2`.
     */
    function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {
        unchecked {
            return Math.modExp(a, p - 2, p);
        }
    }

    /**
     * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)
     *
     * Requirements:
     * - modulus can't be zero
     * - underlying staticcall to precompile must succeed
     *
     * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make
     * sure the chain you're using it on supports the precompiled contract for modular exponentiation
     * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,
     * the underlying function will succeed given the lack of a revert, but the result may be incorrectly
     * interpreted as 0.
     */
    function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {
        (bool success, uint256 result) = tryModExp(b, e, m);
        if (!success) {
            Panic.panic(Panic.DIVISION_BY_ZERO);
        }
        return result;
    }

    /**
     * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).
     * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying
     * to operate modulo 0 or if the underlying precompile reverted.
     *
     * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain
     * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in
     * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack
     * of a revert, but the result may be incorrectly interpreted as 0.
     */
    function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {
        if (m == 0) return (false, 0);
        assembly ("memory-safe") {
            let ptr := mload(0x40)
            // | Offset    | Content    | Content (Hex)                                                      |
            // |-----------|------------|--------------------------------------------------------------------|
            // | 0x00:0x1f | size of b  | 0x0000000000000000000000000000000000000000000000000000000000000020 |
            // | 0x20:0x3f | size of e  | 0x0000000000000000000000000000000000000000000000000000000000000020 |
            // | 0x40:0x5f | size of m  | 0x0000000000000000000000000000000000000000000000000000000000000020 |
            // | 0x60:0x7f | value of b | 0x<.............................................................b> |
            // | 0x80:0x9f | value of e | 0x<.............................................................e> |
            // | 0xa0:0xbf | value of m | 0x<.............................................................m> |
            mstore(ptr, 0x20)
            mstore(add(ptr, 0x20), 0x20)
            mstore(add(ptr, 0x40), 0x20)
            mstore(add(ptr, 0x60), b)
            mstore(add(ptr, 0x80), e)
            mstore(add(ptr, 0xa0), m)

            // Given the result < m, it's guaranteed to fit in 32 bytes,
            // so we can use the memory scratch space located at offset 0.
            success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)
            result := mload(0x00)
        }
    }

    /**
     * @dev Variant of {modExp} that supports inputs of arbitrary length.
     */
    function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {
        (bool success, bytes memory result) = tryModExp(b, e, m);
        if (!success) {
            Panic.panic(Panic.DIVISION_BY_ZERO);
        }
        return result;
    }

    /**
     * @dev Variant of {tryModExp} that supports inputs of arbitrary length.
     */
    function tryModExp(
        bytes memory b,
        bytes memory e,
        bytes memory m
    ) internal view returns (bool success, bytes memory result) {
        if (_zeroBytes(m)) return (false, new bytes(0));

        uint256 mLen = m.length;

        // Encode call args in result and move the free memory pointer
        result = abi.encodePacked(b.length, e.length, mLen, b, e, m);

        assembly ("memory-safe") {
            let dataPtr := add(result, 0x20)
            // Write result on top of args to avoid allocating extra memory.
            success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)
            // Overwrite the length.
            // result.length > returndatasize() is guaranteed because returndatasize() == m.length
            mstore(result, mLen)
            // Set the memory pointer after the returned data.
            mstore(0x40, add(dataPtr, mLen))
        }
    }

    /**
     * @dev Returns whether the provided byte array is zero.
     */
    function _zeroBytes(bytes memory byteArray) private pure returns (bool) {
        for (uint256 i = 0; i < byteArray.length; ++i) {
            if (byteArray[i] != 0) {
                return false;
            }
        }
        return true;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded
     * towards zero.
     *
     * This method is based on Newton's method for computing square roots; the algorithm is restricted to only
     * using integer operations.
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        unchecked {
            // Take care of easy edge cases when a == 0 or a == 1
            if (a <= 1) {
                return a;
            }

            // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a
            // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between
            // the current value as `ε_n = | x_n - sqrt(a) |`.
            //
            // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root
            // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is
            // bigger than any uint256.
            //
            // By noticing that
            // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`
            // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar
            // to the msb function.
            uint256 aa = a;
            uint256 xn = 1;

            if (aa >= (1 << 128)) {
                aa >>= 128;
                xn <<= 64;
            }
            if (aa >= (1 << 64)) {
                aa >>= 64;
                xn <<= 32;
            }
            if (aa >= (1 << 32)) {
                aa >>= 32;
                xn <<= 16;
            }
            if (aa >= (1 << 16)) {
                aa >>= 16;
                xn <<= 8;
            }
            if (aa >= (1 << 8)) {
                aa >>= 8;
                xn <<= 4;
            }
            if (aa >= (1 << 4)) {
                aa >>= 4;
                xn <<= 2;
            }
            if (aa >= (1 << 2)) {
                xn <<= 1;
            }

            // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).
            //
            // We can refine our estimation by noticing that the middle of that interval minimizes the error.
            // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).
            // This is going to be our x_0 (and ε_0)
            xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)

            // From here, Newton's method give us:
            // x_{n+1} = (x_n + a / x_n) / 2
            //
            // One should note that:
            // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a
            //              = ((x_n² + a) / (2 * x_n))² - a
            //              = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a
            //              = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)
            //              = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)
            //              = (x_n² - a)² / (2 * x_n)²
            //              = ((x_n² - a) / (2 * x_n))²
            //              ≥ 0
            // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n
            //
            // This gives us the proof of quadratic convergence of the sequence:
            // ε_{n+1} = | x_{n+1} - sqrt(a) |
            //         = | (x_n + a / x_n) / 2 - sqrt(a) |
            //         = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |
            //         = | (x_n - sqrt(a))² / (2 * x_n) |
            //         = | ε_n² / (2 * x_n) |
            //         = ε_n² / | (2 * x_n) |
            //
            // For the first iteration, we have a special case where x_0 is known:
            // ε_1 = ε_0² / | (2 * x_0) |
            //     ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))
            //     ≤ 2**(2*e-4) / (3 * 2**(e-1))
            //     ≤ 2**(e-3) / 3
            //     ≤ 2**(e-3-log2(3))
            //     ≤ 2**(e-4.5)
            //
            // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:
            // ε_{n+1} = ε_n² / | (2 * x_n) |
            //         ≤ (2**(e-k))² / (2 * 2**(e-1))
            //         ≤ 2**(2*e-2*k) / 2**e
            //         ≤ 2**(e-2*k)
            xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5)  -- special case, see above
            xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9)    -- general case with k = 4.5
            xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18)   -- general case with k = 9
            xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36)   -- general case with k = 18
            xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72)   -- general case with k = 36
            xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144)  -- general case with k = 72

            // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision
            // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either
            // sqrt(a) or sqrt(a) + 1.
            return xn - SafeCast.toUint(xn > a / xn);
        }
    }

    /**
     * @dev Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);
        }
    }

    /**
     * @dev Return the log in base 2 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log2(uint256 x) internal pure returns (uint256 r) {
        // If value has upper 128 bits set, log2 result is at least 128
        r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;
        // If upper 64 bits of 128-bit half set, add 64 to result
        r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;
        // If upper 32 bits of 64-bit half set, add 32 to result
        r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;
        // If upper 16 bits of 32-bit half set, add 16 to result
        r |= SafeCast.toUint((x >> r) > 0xffff) << 4;
        // If upper 8 bits of 16-bit half set, add 8 to result
        r |= SafeCast.toUint((x >> r) > 0xff) << 3;
        // If upper 4 bits of 8-bit half set, add 4 to result
        r |= SafeCast.toUint((x >> r) > 0xf) << 2;

        // Shifts value right by the current result and use it as an index into this lookup table:
        //
        // | x (4 bits) |  index  | table[index] = MSB position |
        // |------------|---------|-----------------------------|
        // |    0000    |    0    |        table[0] = 0         |
        // |    0001    |    1    |        table[1] = 0         |
        // |    0010    |    2    |        table[2] = 1         |
        // |    0011    |    3    |        table[3] = 1         |
        // |    0100    |    4    |        table[4] = 2         |
        // |    0101    |    5    |        table[5] = 2         |
        // |    0110    |    6    |        table[6] = 2         |
        // |    0111    |    7    |        table[7] = 2         |
        // |    1000    |    8    |        table[8] = 3         |
        // |    1001    |    9    |        table[9] = 3         |
        // |    1010    |   10    |        table[10] = 3        |
        // |    1011    |   11    |        table[11] = 3        |
        // |    1100    |   12    |        table[12] = 3        |
        // |    1101    |   13    |        table[13] = 3        |
        // |    1110    |   14    |        table[14] = 3        |
        // |    1111    |   15    |        table[15] = 3        |
        //
        // The lookup table is represented as a 32-byte value with the MSB positions for 0-15 in the last 16 bytes.
        assembly ("memory-safe") {
            r := or(r, byte(shr(r, x), 0x0000010102020202030303030303030300000000000000000000000000000000))
        }
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);
        }
    }

    /**
     * @dev Return the log in base 10 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);
        }
    }

    /**
     * @dev Return the log in base 256 of a positive value rounded towards zero.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 x) internal pure returns (uint256 r) {
        // If value has upper 128 bits set, log2 result is at least 128
        r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;
        // If upper 64 bits of 128-bit half set, add 64 to result
        r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;
        // If upper 32 bits of 64-bit half set, add 32 to result
        r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;
        // If upper 16 bits of 32-bit half set, add 16 to result
        r |= SafeCast.toUint((x >> r) > 0xffff) << 4;
        // Add 1 if upper 8 bits of 16-bit half set, and divide accumulated result by 8
        return (r >> 3) | SafeCast.toUint((x >> r) > 0xff);
    }

    /**
     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);
        }
    }

    /**
     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.
     */
    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
        return uint8(rounding) % 2 == 1;
    }
}

File 30 of 31 : SafeCast.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)
// This file was procedurally generated from scripts/generate/templates/SafeCast.js.

pragma solidity ^0.8.20;

/**
 * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeCast {
    /**
     * @dev Value doesn't fit in an uint of `bits` size.
     */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);

    /**
     * @dev An int value doesn't fit in an uint of `bits` size.
     */
    error SafeCastOverflowedIntToUint(int256 value);

    /**
     * @dev Value doesn't fit in an int of `bits` size.
     */
    error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);

    /**
     * @dev An uint value doesn't fit in an int of `bits` size.
     */
    error SafeCastOverflowedUintToInt(uint256 value);

    /**
     * @dev Returns the downcasted uint248 from uint256, reverting on
     * overflow (when the input is greater than largest uint248).
     *
     * Counterpart to Solidity's `uint248` operator.
     *
     * Requirements:
     *
     * - input must fit into 248 bits
     */
    function toUint248(uint256 value) internal pure returns (uint248) {
        if (value > type(uint248).max) {
            revert SafeCastOverflowedUintDowncast(248, value);
        }
        return uint248(value);
    }

    /**
     * @dev Returns the downcasted uint240 from uint256, reverting on
     * overflow (when the input is greater than largest uint240).
     *
     * Counterpart to Solidity's `uint240` operator.
     *
     * Requirements:
     *
     * - input must fit into 240 bits
     */
    function toUint240(uint256 value) internal pure returns (uint240) {
        if (value > type(uint240).max) {
            revert SafeCastOverflowedUintDowncast(240, value);
        }
        return uint240(value);
    }

    /**
     * @dev Returns the downcasted uint232 from uint256, reverting on
     * overflow (when the input is greater than largest uint232).
     *
     * Counterpart to Solidity's `uint232` operator.
     *
     * Requirements:
     *
     * - input must fit into 232 bits
     */
    function toUint232(uint256 value) internal pure returns (uint232) {
        if (value > type(uint232).max) {
            revert SafeCastOverflowedUintDowncast(232, value);
        }
        return uint232(value);
    }

    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        if (value > type(uint224).max) {
            revert SafeCastOverflowedUintDowncast(224, value);
        }
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint216 from uint256, reverting on
     * overflow (when the input is greater than largest uint216).
     *
     * Counterpart to Solidity's `uint216` operator.
     *
     * Requirements:
     *
     * - input must fit into 216 bits
     */
    function toUint216(uint256 value) internal pure returns (uint216) {
        if (value > type(uint216).max) {
            revert SafeCastOverflowedUintDowncast(216, value);
        }
        return uint216(value);
    }

    /**
     * @dev Returns the downcasted uint208 from uint256, reverting on
     * overflow (when the input is greater than largest uint208).
     *
     * Counterpart to Solidity's `uint208` operator.
     *
     * Requirements:
     *
     * - input must fit into 208 bits
     */
    function toUint208(uint256 value) internal pure returns (uint208) {
        if (value > type(uint208).max) {
            revert SafeCastOverflowedUintDowncast(208, value);
        }
        return uint208(value);
    }

    /**
     * @dev Returns the downcasted uint200 from uint256, reverting on
     * overflow (when the input is greater than largest uint200).
     *
     * Counterpart to Solidity's `uint200` operator.
     *
     * Requirements:
     *
     * - input must fit into 200 bits
     */
    function toUint200(uint256 value) internal pure returns (uint200) {
        if (value > type(uint200).max) {
            revert SafeCastOverflowedUintDowncast(200, value);
        }
        return uint200(value);
    }

    /**
     * @dev Returns the downcasted uint192 from uint256, reverting on
     * overflow (when the input is greater than largest uint192).
     *
     * Counterpart to Solidity's `uint192` operator.
     *
     * Requirements:
     *
     * - input must fit into 192 bits
     */
    function toUint192(uint256 value) internal pure returns (uint192) {
        if (value > type(uint192).max) {
            revert SafeCastOverflowedUintDowncast(192, value);
        }
        return uint192(value);
    }

    /**
     * @dev Returns the downcasted uint184 from uint256, reverting on
     * overflow (when the input is greater than largest uint184).
     *
     * Counterpart to Solidity's `uint184` operator.
     *
     * Requirements:
     *
     * - input must fit into 184 bits
     */
    function toUint184(uint256 value) internal pure returns (uint184) {
        if (value > type(uint184).max) {
            revert SafeCastOverflowedUintDowncast(184, value);
        }
        return uint184(value);
    }

    /**
     * @dev Returns the downcasted uint176 from uint256, reverting on
     * overflow (when the input is greater than largest uint176).
     *
     * Counterpart to Solidity's `uint176` operator.
     *
     * Requirements:
     *
     * - input must fit into 176 bits
     */
    function toUint176(uint256 value) internal pure returns (uint176) {
        if (value > type(uint176).max) {
            revert SafeCastOverflowedUintDowncast(176, value);
        }
        return uint176(value);
    }

    /**
     * @dev Returns the downcasted uint168 from uint256, reverting on
     * overflow (when the input is greater than largest uint168).
     *
     * Counterpart to Solidity's `uint168` operator.
     *
     * Requirements:
     *
     * - input must fit into 168 bits
     */
    function toUint168(uint256 value) internal pure returns (uint168) {
        if (value > type(uint168).max) {
            revert SafeCastOverflowedUintDowncast(168, value);
        }
        return uint168(value);
    }

    /**
     * @dev Returns the downcasted uint160 from uint256, reverting on
     * overflow (when the input is greater than largest uint160).
     *
     * Counterpart to Solidity's `uint160` operator.
     *
     * Requirements:
     *
     * - input must fit into 160 bits
     */
    function toUint160(uint256 value) internal pure returns (uint160) {
        if (value > type(uint160).max) {
            revert SafeCastOverflowedUintDowncast(160, value);
        }
        return uint160(value);
    }

    /**
     * @dev Returns the downcasted uint152 from uint256, reverting on
     * overflow (when the input is greater than largest uint152).
     *
     * Counterpart to Solidity's `uint152` operator.
     *
     * Requirements:
     *
     * - input must fit into 152 bits
     */
    function toUint152(uint256 value) internal pure returns (uint152) {
        if (value > type(uint152).max) {
            revert SafeCastOverflowedUintDowncast(152, value);
        }
        return uint152(value);
    }

    /**
     * @dev Returns the downcasted uint144 from uint256, reverting on
     * overflow (when the input is greater than largest uint144).
     *
     * Counterpart to Solidity's `uint144` operator.
     *
     * Requirements:
     *
     * - input must fit into 144 bits
     */
    function toUint144(uint256 value) internal pure returns (uint144) {
        if (value > type(uint144).max) {
            revert SafeCastOverflowedUintDowncast(144, value);
        }
        return uint144(value);
    }

    /**
     * @dev Returns the downcasted uint136 from uint256, reverting on
     * overflow (when the input is greater than largest uint136).
     *
     * Counterpart to Solidity's `uint136` operator.
     *
     * Requirements:
     *
     * - input must fit into 136 bits
     */
    function toUint136(uint256 value) internal pure returns (uint136) {
        if (value > type(uint136).max) {
            revert SafeCastOverflowedUintDowncast(136, value);
        }
        return uint136(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        if (value > type(uint128).max) {
            revert SafeCastOverflowedUintDowncast(128, value);
        }
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint120 from uint256, reverting on
     * overflow (when the input is greater than largest uint120).
     *
     * Counterpart to Solidity's `uint120` operator.
     *
     * Requirements:
     *
     * - input must fit into 120 bits
     */
    function toUint120(uint256 value) internal pure returns (uint120) {
        if (value > type(uint120).max) {
            revert SafeCastOverflowedUintDowncast(120, value);
        }
        return uint120(value);
    }

    /**
     * @dev Returns the downcasted uint112 from uint256, reverting on
     * overflow (when the input is greater than largest uint112).
     *
     * Counterpart to Solidity's `uint112` operator.
     *
     * Requirements:
     *
     * - input must fit into 112 bits
     */
    function toUint112(uint256 value) internal pure returns (uint112) {
        if (value > type(uint112).max) {
            revert SafeCastOverflowedUintDowncast(112, value);
        }
        return uint112(value);
    }

    /**
     * @dev Returns the downcasted uint104 from uint256, reverting on
     * overflow (when the input is greater than largest uint104).
     *
     * Counterpart to Solidity's `uint104` operator.
     *
     * Requirements:
     *
     * - input must fit into 104 bits
     */
    function toUint104(uint256 value) internal pure returns (uint104) {
        if (value > type(uint104).max) {
            revert SafeCastOverflowedUintDowncast(104, value);
        }
        return uint104(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        if (value > type(uint96).max) {
            revert SafeCastOverflowedUintDowncast(96, value);
        }
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint88 from uint256, reverting on
     * overflow (when the input is greater than largest uint88).
     *
     * Counterpart to Solidity's `uint88` operator.
     *
     * Requirements:
     *
     * - input must fit into 88 bits
     */
    function toUint88(uint256 value) internal pure returns (uint88) {
        if (value > type(uint88).max) {
            revert SafeCastOverflowedUintDowncast(88, value);
        }
        return uint88(value);
    }

    /**
     * @dev Returns the downcasted uint80 from uint256, reverting on
     * overflow (when the input is greater than largest uint80).
     *
     * Counterpart to Solidity's `uint80` operator.
     *
     * Requirements:
     *
     * - input must fit into 80 bits
     */
    function toUint80(uint256 value) internal pure returns (uint80) {
        if (value > type(uint80).max) {
            revert SafeCastOverflowedUintDowncast(80, value);
        }
        return uint80(value);
    }

    /**
     * @dev Returns the downcasted uint72 from uint256, reverting on
     * overflow (when the input is greater than largest uint72).
     *
     * Counterpart to Solidity's `uint72` operator.
     *
     * Requirements:
     *
     * - input must fit into 72 bits
     */
    function toUint72(uint256 value) internal pure returns (uint72) {
        if (value > type(uint72).max) {
            revert SafeCastOverflowedUintDowncast(72, value);
        }
        return uint72(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        if (value > type(uint64).max) {
            revert SafeCastOverflowedUintDowncast(64, value);
        }
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint56 from uint256, reverting on
     * overflow (when the input is greater than largest uint56).
     *
     * Counterpart to Solidity's `uint56` operator.
     *
     * Requirements:
     *
     * - input must fit into 56 bits
     */
    function toUint56(uint256 value) internal pure returns (uint56) {
        if (value > type(uint56).max) {
            revert SafeCastOverflowedUintDowncast(56, value);
        }
        return uint56(value);
    }

    /**
     * @dev Returns the downcasted uint48 from uint256, reverting on
     * overflow (when the input is greater than largest uint48).
     *
     * Counterpart to Solidity's `uint48` operator.
     *
     * Requirements:
     *
     * - input must fit into 48 bits
     */
    function toUint48(uint256 value) internal pure returns (uint48) {
        if (value > type(uint48).max) {
            revert SafeCastOverflowedUintDowncast(48, value);
        }
        return uint48(value);
    }

    /**
     * @dev Returns the downcasted uint40 from uint256, reverting on
     * overflow (when the input is greater than largest uint40).
     *
     * Counterpart to Solidity's `uint40` operator.
     *
     * Requirements:
     *
     * - input must fit into 40 bits
     */
    function toUint40(uint256 value) internal pure returns (uint40) {
        if (value > type(uint40).max) {
            revert SafeCastOverflowedUintDowncast(40, value);
        }
        return uint40(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        if (value > type(uint32).max) {
            revert SafeCastOverflowedUintDowncast(32, value);
        }
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint24 from uint256, reverting on
     * overflow (when the input is greater than largest uint24).
     *
     * Counterpart to Solidity's `uint24` operator.
     *
     * Requirements:
     *
     * - input must fit into 24 bits
     */
    function toUint24(uint256 value) internal pure returns (uint24) {
        if (value > type(uint24).max) {
            revert SafeCastOverflowedUintDowncast(24, value);
        }
        return uint24(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        if (value > type(uint16).max) {
            revert SafeCastOverflowedUintDowncast(16, value);
        }
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        if (value > type(uint8).max) {
            revert SafeCastOverflowedUintDowncast(8, value);
        }
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        if (value < 0) {
            revert SafeCastOverflowedIntToUint(value);
        }
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int248 from int256, reverting on
     * overflow (when the input is less than smallest int248 or
     * greater than largest int248).
     *
     * Counterpart to Solidity's `int248` operator.
     *
     * Requirements:
     *
     * - input must fit into 248 bits
     */
    function toInt248(int256 value) internal pure returns (int248 downcasted) {
        downcasted = int248(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(248, value);
        }
    }

    /**
     * @dev Returns the downcasted int240 from int256, reverting on
     * overflow (when the input is less than smallest int240 or
     * greater than largest int240).
     *
     * Counterpart to Solidity's `int240` operator.
     *
     * Requirements:
     *
     * - input must fit into 240 bits
     */
    function toInt240(int256 value) internal pure returns (int240 downcasted) {
        downcasted = int240(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(240, value);
        }
    }

    /**
     * @dev Returns the downcasted int232 from int256, reverting on
     * overflow (when the input is less than smallest int232 or
     * greater than largest int232).
     *
     * Counterpart to Solidity's `int232` operator.
     *
     * Requirements:
     *
     * - input must fit into 232 bits
     */
    function toInt232(int256 value) internal pure returns (int232 downcasted) {
        downcasted = int232(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(232, value);
        }
    }

    /**
     * @dev Returns the downcasted int224 from int256, reverting on
     * overflow (when the input is less than smallest int224 or
     * greater than largest int224).
     *
     * Counterpart to Solidity's `int224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toInt224(int256 value) internal pure returns (int224 downcasted) {
        downcasted = int224(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(224, value);
        }
    }

    /**
     * @dev Returns the downcasted int216 from int256, reverting on
     * overflow (when the input is less than smallest int216 or
     * greater than largest int216).
     *
     * Counterpart to Solidity's `int216` operator.
     *
     * Requirements:
     *
     * - input must fit into 216 bits
     */
    function toInt216(int256 value) internal pure returns (int216 downcasted) {
        downcasted = int216(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(216, value);
        }
    }

    /**
     * @dev Returns the downcasted int208 from int256, reverting on
     * overflow (when the input is less than smallest int208 or
     * greater than largest int208).
     *
     * Counterpart to Solidity's `int208` operator.
     *
     * Requirements:
     *
     * - input must fit into 208 bits
     */
    function toInt208(int256 value) internal pure returns (int208 downcasted) {
        downcasted = int208(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(208, value);
        }
    }

    /**
     * @dev Returns the downcasted int200 from int256, reverting on
     * overflow (when the input is less than smallest int200 or
     * greater than largest int200).
     *
     * Counterpart to Solidity's `int200` operator.
     *
     * Requirements:
     *
     * - input must fit into 200 bits
     */
    function toInt200(int256 value) internal pure returns (int200 downcasted) {
        downcasted = int200(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(200, value);
        }
    }

    /**
     * @dev Returns the downcasted int192 from int256, reverting on
     * overflow (when the input is less than smallest int192 or
     * greater than largest int192).
     *
     * Counterpart to Solidity's `int192` operator.
     *
     * Requirements:
     *
     * - input must fit into 192 bits
     */
    function toInt192(int256 value) internal pure returns (int192 downcasted) {
        downcasted = int192(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(192, value);
        }
    }

    /**
     * @dev Returns the downcasted int184 from int256, reverting on
     * overflow (when the input is less than smallest int184 or
     * greater than largest int184).
     *
     * Counterpart to Solidity's `int184` operator.
     *
     * Requirements:
     *
     * - input must fit into 184 bits
     */
    function toInt184(int256 value) internal pure returns (int184 downcasted) {
        downcasted = int184(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(184, value);
        }
    }

    /**
     * @dev Returns the downcasted int176 from int256, reverting on
     * overflow (when the input is less than smallest int176 or
     * greater than largest int176).
     *
     * Counterpart to Solidity's `int176` operator.
     *
     * Requirements:
     *
     * - input must fit into 176 bits
     */
    function toInt176(int256 value) internal pure returns (int176 downcasted) {
        downcasted = int176(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(176, value);
        }
    }

    /**
     * @dev Returns the downcasted int168 from int256, reverting on
     * overflow (when the input is less than smallest int168 or
     * greater than largest int168).
     *
     * Counterpart to Solidity's `int168` operator.
     *
     * Requirements:
     *
     * - input must fit into 168 bits
     */
    function toInt168(int256 value) internal pure returns (int168 downcasted) {
        downcasted = int168(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(168, value);
        }
    }

    /**
     * @dev Returns the downcasted int160 from int256, reverting on
     * overflow (when the input is less than smallest int160 or
     * greater than largest int160).
     *
     * Counterpart to Solidity's `int160` operator.
     *
     * Requirements:
     *
     * - input must fit into 160 bits
     */
    function toInt160(int256 value) internal pure returns (int160 downcasted) {
        downcasted = int160(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(160, value);
        }
    }

    /**
     * @dev Returns the downcasted int152 from int256, reverting on
     * overflow (when the input is less than smallest int152 or
     * greater than largest int152).
     *
     * Counterpart to Solidity's `int152` operator.
     *
     * Requirements:
     *
     * - input must fit into 152 bits
     */
    function toInt152(int256 value) internal pure returns (int152 downcasted) {
        downcasted = int152(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(152, value);
        }
    }

    /**
     * @dev Returns the downcasted int144 from int256, reverting on
     * overflow (when the input is less than smallest int144 or
     * greater than largest int144).
     *
     * Counterpart to Solidity's `int144` operator.
     *
     * Requirements:
     *
     * - input must fit into 144 bits
     */
    function toInt144(int256 value) internal pure returns (int144 downcasted) {
        downcasted = int144(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(144, value);
        }
    }

    /**
     * @dev Returns the downcasted int136 from int256, reverting on
     * overflow (when the input is less than smallest int136 or
     * greater than largest int136).
     *
     * Counterpart to Solidity's `int136` operator.
     *
     * Requirements:
     *
     * - input must fit into 136 bits
     */
    function toInt136(int256 value) internal pure returns (int136 downcasted) {
        downcasted = int136(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(136, value);
        }
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toInt128(int256 value) internal pure returns (int128 downcasted) {
        downcasted = int128(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(128, value);
        }
    }

    /**
     * @dev Returns the downcasted int120 from int256, reverting on
     * overflow (when the input is less than smallest int120 or
     * greater than largest int120).
     *
     * Counterpart to Solidity's `int120` operator.
     *
     * Requirements:
     *
     * - input must fit into 120 bits
     */
    function toInt120(int256 value) internal pure returns (int120 downcasted) {
        downcasted = int120(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(120, value);
        }
    }

    /**
     * @dev Returns the downcasted int112 from int256, reverting on
     * overflow (when the input is less than smallest int112 or
     * greater than largest int112).
     *
     * Counterpart to Solidity's `int112` operator.
     *
     * Requirements:
     *
     * - input must fit into 112 bits
     */
    function toInt112(int256 value) internal pure returns (int112 downcasted) {
        downcasted = int112(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(112, value);
        }
    }

    /**
     * @dev Returns the downcasted int104 from int256, reverting on
     * overflow (when the input is less than smallest int104 or
     * greater than largest int104).
     *
     * Counterpart to Solidity's `int104` operator.
     *
     * Requirements:
     *
     * - input must fit into 104 bits
     */
    function toInt104(int256 value) internal pure returns (int104 downcasted) {
        downcasted = int104(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(104, value);
        }
    }

    /**
     * @dev Returns the downcasted int96 from int256, reverting on
     * overflow (when the input is less than smallest int96 or
     * greater than largest int96).
     *
     * Counterpart to Solidity's `int96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toInt96(int256 value) internal pure returns (int96 downcasted) {
        downcasted = int96(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(96, value);
        }
    }

    /**
     * @dev Returns the downcasted int88 from int256, reverting on
     * overflow (when the input is less than smallest int88 or
     * greater than largest int88).
     *
     * Counterpart to Solidity's `int88` operator.
     *
     * Requirements:
     *
     * - input must fit into 88 bits
     */
    function toInt88(int256 value) internal pure returns (int88 downcasted) {
        downcasted = int88(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(88, value);
        }
    }

    /**
     * @dev Returns the downcasted int80 from int256, reverting on
     * overflow (when the input is less than smallest int80 or
     * greater than largest int80).
     *
     * Counterpart to Solidity's `int80` operator.
     *
     * Requirements:
     *
     * - input must fit into 80 bits
     */
    function toInt80(int256 value) internal pure returns (int80 downcasted) {
        downcasted = int80(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(80, value);
        }
    }

    /**
     * @dev Returns the downcasted int72 from int256, reverting on
     * overflow (when the input is less than smallest int72 or
     * greater than largest int72).
     *
     * Counterpart to Solidity's `int72` operator.
     *
     * Requirements:
     *
     * - input must fit into 72 bits
     */
    function toInt72(int256 value) internal pure returns (int72 downcasted) {
        downcasted = int72(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(72, value);
        }
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toInt64(int256 value) internal pure returns (int64 downcasted) {
        downcasted = int64(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(64, value);
        }
    }

    /**
     * @dev Returns the downcasted int56 from int256, reverting on
     * overflow (when the input is less than smallest int56 or
     * greater than largest int56).
     *
     * Counterpart to Solidity's `int56` operator.
     *
     * Requirements:
     *
     * - input must fit into 56 bits
     */
    function toInt56(int256 value) internal pure returns (int56 downcasted) {
        downcasted = int56(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(56, value);
        }
    }

    /**
     * @dev Returns the downcasted int48 from int256, reverting on
     * overflow (when the input is less than smallest int48 or
     * greater than largest int48).
     *
     * Counterpart to Solidity's `int48` operator.
     *
     * Requirements:
     *
     * - input must fit into 48 bits
     */
    function toInt48(int256 value) internal pure returns (int48 downcasted) {
        downcasted = int48(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(48, value);
        }
    }

    /**
     * @dev Returns the downcasted int40 from int256, reverting on
     * overflow (when the input is less than smallest int40 or
     * greater than largest int40).
     *
     * Counterpart to Solidity's `int40` operator.
     *
     * Requirements:
     *
     * - input must fit into 40 bits
     */
    function toInt40(int256 value) internal pure returns (int40 downcasted) {
        downcasted = int40(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(40, value);
        }
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toInt32(int256 value) internal pure returns (int32 downcasted) {
        downcasted = int32(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(32, value);
        }
    }

    /**
     * @dev Returns the downcasted int24 from int256, reverting on
     * overflow (when the input is less than smallest int24 or
     * greater than largest int24).
     *
     * Counterpart to Solidity's `int24` operator.
     *
     * Requirements:
     *
     * - input must fit into 24 bits
     */
    function toInt24(int256 value) internal pure returns (int24 downcasted) {
        downcasted = int24(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(24, value);
        }
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toInt16(int256 value) internal pure returns (int16 downcasted) {
        downcasted = int16(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(16, value);
        }
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits
     */
    function toInt8(int256 value) internal pure returns (int8 downcasted) {
        downcasted = int8(value);
        if (downcasted != value) {
            revert SafeCastOverflowedIntDowncast(8, value);
        }
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        if (value > uint256(type(int256).max)) {
            revert SafeCastOverflowedUintToInt(value);
        }
        return int256(value);
    }

    /**
     * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.
     */
    function toUint(bool b) internal pure returns (uint256 u) {
        assembly ("memory-safe") {
            u := iszero(iszero(b))
        }
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)

pragma solidity ^0.8.20;

/**
 * @dev Helper library for emitting standardized panic codes.
 *
 * ```solidity
 * contract Example {
 *      using Panic for uint256;
 *
 *      // Use any of the declared internal constants
 *      function foo() { Panic.GENERIC.panic(); }
 *
 *      // Alternatively
 *      function foo() { Panic.panic(Panic.GENERIC); }
 * }
 * ```
 *
 * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
 *
 * _Available since v5.1._
 */
// slither-disable-next-line unused-state
library Panic {
    /// @dev generic / unspecified error
    uint256 internal constant GENERIC = 0x00;
    /// @dev used by the assert() builtin
    uint256 internal constant ASSERT = 0x01;
    /// @dev arithmetic underflow or overflow
    uint256 internal constant UNDER_OVERFLOW = 0x11;
    /// @dev division or modulo by zero
    uint256 internal constant DIVISION_BY_ZERO = 0x12;
    /// @dev enum conversion error
    uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;
    /// @dev invalid encoding in storage
    uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;
    /// @dev empty array pop
    uint256 internal constant EMPTY_ARRAY_POP = 0x31;
    /// @dev array out of bounds access
    uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;
    /// @dev resource error (too large allocation or too large array)
    uint256 internal constant RESOURCE_ERROR = 0x41;
    /// @dev calling invalid internal function
    uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;

    /// @dev Reverts with a panic code. Recommended to use with
    /// the internal constants with predefined codes.
    function panic(uint256 code) internal pure {
        assembly ("memory-safe") {
            mstore(0x00, 0x4e487b71)
            mstore(0x20, code)
            revert(0x1c, 0x24)
        }
    }
}

Settings
{
  "evmVersion": "paris",
  "optimizer": {
    "enabled": true,
    "mode": "3"
  },
  "outputSelection": {
    "*": {
      "*": [
        "abi"
      ]
    }
  },
  "detectMissingLibraries": false,
  "forceEVMLA": false,
  "enableEraVMExtensions": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyAtMaxHangar","type":"error"},{"inputs":[],"name":"AlreadyAtMaxShip","type":"error"},{"inputs":[],"name":"AlreadyClaimedMaxRelics","type":"error"},{"inputs":[],"name":"AlreadyHaveCrewFromContract","type":"error"},{"inputs":[],"name":"AlreadyPurchasedInitialHangar","type":"error"},{"inputs":[],"name":"CannotChangeFactionYet","type":"error"},{"inputs":[],"name":"CantBuyNewHangarYet","type":"error"},{"inputs":[],"name":"CantBuyNewShipYet","type":"error"},{"inputs":[],"name":"CantModifyStarterHangar","type":"error"},{"inputs":[],"name":"CantModifyStarterNode","type":"error"},{"inputs":[],"name":"CantModifyStarterRelic","type":"error"},{"inputs":[],"name":"CantModifyStarterShip","type":"error"},{"inputs":[],"name":"CantPlayGameYet","type":"error"},{"inputs":[],"name":"CrewNotFound","type":"error"},{"inputs":[],"name":"CrewTemplateNotFound","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[],"name":"FactionFull","type":"error"},{"inputs":[],"name":"FactionNotActive","type":"error"},{"inputs":[],"name":"GameNotActive","type":"error"},{"inputs":[],"name":"GreatDepression","type":"error"},{"inputs":[],"name":"HangarDimensionsInvalid","type":"error"},{"inputs":[],"name":"HangarFullofRelics","type":"error"},{"inputs":[],"name":"IncorrectValue","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidArcOutput","type":"error"},{"inputs":[],"name":"InvalidCrewCoordinates","type":"error"},{"inputs":[],"name":"InvalidFaction","type":"error"},{"inputs":[],"name":"InvalidFee","type":"error"},{"inputs":[],"name":"InvalidGameIndex","type":"error"},{"inputs":[],"name":"InvalidHangarIndex","type":"error"},{"inputs":[],"name":"InvalidNodeCoordinates","type":"error"},{"inputs":[],"name":"InvalidNodeIndex","type":"error"},{"inputs":[],"name":"InvalidReferrer","type":"error"},{"inputs":[],"name":"InvalidRelicCoordinates","type":"error"},{"inputs":[],"name":"InvalidRelicIndex","type":"error"},{"inputs":[],"name":"InvalidShipIndex","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"MiningHasntStarted","type":"error"},{"inputs":[],"name":"MustOwnFungibleToken","type":"error"},{"inputs":[],"name":"MustOwnNFT","type":"error"},{"inputs":[],"name":"NeedToInitializeHangar","type":"error"},{"inputs":[],"name":"NeedToInitializeShip","type":"error"},{"inputs":[],"name":"NewHangarNotInProduction","type":"error"},{"inputs":[],"name":"NewShipNotInProduction","type":"error"},{"inputs":[],"name":"NoCasho","type":"error"},{"inputs":[],"name":"NoNodeAtCoordinates","type":"error"},{"inputs":[],"name":"NoRewardsPending","type":"error"},{"inputs":[],"name":"NodeMaxReached","type":"error"},{"inputs":[],"name":"NodeNotFoundAtCoordinates","type":"error"},{"inputs":[],"name":"NodeNotInProduction","type":"error"},{"inputs":[],"name":"NodeSoldOut","type":"error"},{"inputs":[],"name":"NonExistentHangar","type":"error"},{"inputs":[],"name":"NonExistentNode","type":"error"},{"inputs":[],"name":"NonExistentRelic","type":"error"},{"inputs":[],"name":"NonExistentShip","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PlayerDoesNotOwnRelic","type":"error"},{"inputs":[],"name":"RelicMaxReached","type":"error"},{"inputs":[],"name":"RelicNotClaimable","type":"error"},{"inputs":[],"name":"RelicNotInProduction","type":"error"},{"inputs":[],"name":"RelicSoldOut","type":"error"},{"inputs":[],"name":"ShipCrewCapacityReached","type":"error"},{"inputs":[],"name":"ShipDimensionsInvalid","type":"error"},{"inputs":[],"name":"ShipInadequateArcOutput","type":"error"},{"inputs":[],"name":"ShipNodeCapacityReached","type":"error"},{"inputs":[],"name":"StarterNodeAlreadyAcquired","type":"error"},{"inputs":[],"name":"StarterRelicAlreadyAcquired","type":"error"},{"inputs":[],"name":"TokenAlreadyExists","type":"error"},{"inputs":[],"name":"TokenDoesNotExist","type":"error"},{"inputs":[],"name":"WithdrawFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ClaimsPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ContractPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"crewId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"},{"indexed":false,"internalType":"address","name":"contractCollection","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"crewType","type":"string"}],"name":"CrewAssigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"crewId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"},{"indexed":false,"internalType":"address","name":"contractCollection","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"crewType","type":"string"}],"name":"CrewUnassigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"FactionAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"factionId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"FactionStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"gameIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"GameStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"HangarBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"HangarCostChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"}],"name":"HangarProductionToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"}],"name":"InitialHangarPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"}],"name":"InitialShipPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"}],"name":"MiningStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"gameIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"syncRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fluxRate","type":"uint256"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"NewGameAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"maxRelics","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"}],"name":"NewHangarAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"fluxRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxPerPlayer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"uniqueNodeCount","type":"uint256"}],"name":"NewNodeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"relicIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"fluxRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"syncRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"},{"indexed":false,"internalType":"bool","name":"claimable","type":"bool"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"}],"name":"NewRelicAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"shipIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"maxNodes","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxCrew","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalArcOutput","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"}],"name":"NewShipAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractCollection","type":"address"},{"indexed":false,"internalType":"string","name":"slug","type":"string"},{"indexed":false,"internalType":"bool","name":"isVerified","type":"bool"},{"indexed":false,"internalType":"string","name":"chain","type":"string"}],"name":"NewTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nodeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"}],"name":"NodeBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"NodeCostChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"}],"name":"NodeProductionToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"NodeSecondaryMarketAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondHandPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nodeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"}],"name":"NodeSold","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":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerFluxrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerFluxrateDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerFluxrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerFluxrateIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"syncRateRemoved","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fluxRateRemoved","type":"uint256"}],"name":"PlayerGameBonusExpired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerFluxrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerSyncrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerGameRewardsActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"factionId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"switched","type":"bool"}],"name":"PlayerJoinedFaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerMiningStart","type":"uint256"}],"name":"PlayerMiningStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"}],"name":"PlayerRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerSyncrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerSyncrateDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"playerSyncrate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerPendingRewards","type":"uint256"}],"name":"PlayerSyncrateIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"relicIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"relicId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"}],"name":"RelicBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"relicIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"RelicCostChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"relicId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenUsed","type":"address"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"}],"name":"RelicGrantedByToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"relicIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"}],"name":"RelicProductionToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"relicIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"RelicSecondaryMarketAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"relicIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondHandPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"relicId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"x","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"y","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"}],"name":"RelicSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"shipIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"ShipBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"shipIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"ShipCostChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"shipIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"inProduction","type":"bool"}],"name":"ShipProductionToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractCollection","type":"address"},{"indexed":false,"internalType":"string","name":"slug","type":"string"},{"indexed":false,"internalType":"bool","name":"isVerified","type":"bool"},{"indexed":false,"internalType":"string","name":"chain","type":"string"}],"name":"TokenModified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractCollection","type":"address"},{"indexed":false,"internalType":"bool","name":"isVerified","type":"bool"}],"name":"TokenVerificationToggled","type":"event"},{"inputs":[],"name":"HALVING_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_NETHEREUM_PER_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARDS_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_HANGAR_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_NODE_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_RELIC_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTER_SHIP_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acquiredStarterNode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acquiredStarterRelic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acquiredStarterShip","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"addFaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"name":"addGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxRelics","type":"uint256"},{"internalType":"uint256","name":"costInTokens","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"addHangar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"costInTokens","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"name":"addNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"fluxrate","type":"uint256"},{"internalType":"uint256","name":"syncrate","type":"uint256"},{"internalType":"uint256","name":"costInTokens","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"name":"addRelic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"addSecondaryMarketForNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"addSecondaryMarketForRelic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxNodes","type":"uint256"},{"internalType":"uint256","name":"maxCrew","type":"uint256"},{"internalType":"uint256","name":"totalArcOutput","type":"uint256"},{"internalType":"uint256","name":"costInTokens","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"addShip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"string","name":"slug","type":"string"},{"internalType":"bool","name":"isVerified","type":"bool"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"enum CrewType","name":"crewType","type":"uint8"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPlayers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"assignCrew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct NodeInit[]","name":"nodesToAdd","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct RelicInit[]","name":"relicsToAdd","type":"tuple[]"}],"name":"batchInitialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksUntilNextHalving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyNewHangar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyNewShip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"buyNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"buyRelic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"internalType":"uint256","name":"newCostInTokens","type":"uint256"}],"name":"changeHangarCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"uint256","name":"newCostInTokens","type":"uint256"}],"name":"changeNodeCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"newCostInTokens","type":"uint256"}],"name":"changeRelicCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shipIndex","type":"uint256"},{"internalType":"uint256","name":"newCostInTokens","type":"uint256"}],"name":"changeShipCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"claimRelic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"crew","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"enum CrewType","name":"crewType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crewIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crewSyncRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cumulativeNethereumPerFlux","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nodeIds","type":"uint256[]"},{"internalType":"uint256[]","name":"relicIds","type":"uint256[]"},{"internalType":"uint256[]","name":"crewIds","type":"uint256[]"}],"name":"exportAssetDetailsBatch","outputs":[{"components":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Node[]","name":"exportedNodes","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"enum RelicSource","name":"source","type":"uint8"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"claimedCount","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Relic[]","name":"exportedRelics","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"enum CrewType","name":"crewType","type":"uint8"}],"internalType":"struct Crew[]","name":"exportedCrews","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exportGlobalState","outputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"_totalFluxrate","type":"uint256"},{"internalType":"uint256","name":"_totalSyncrate","type":"uint256"},{"internalType":"uint256","name":"_cumulativeNethereumPerFlux","type":"uint256"},{"internalType":"uint256","name":"_uniqueNodeCount","type":"uint256"},{"internalType":"uint256","name":"_uniqueRelicCount","type":"uint256"},{"internalType":"uint256","name":"_shipCount","type":"uint256"},{"internalType":"uint256","name":"_hangarCount","type":"uint256"},{"internalType":"uint256","name":"_totalFactions","type":"uint256"},{"internalType":"uint256","name":"_uniqueGameCount","type":"uint256"},{"internalType":"bool","name":"_miningHasStarted","type":"bool"},{"internalType":"bool","name":"_claimsPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"batchSize","type":"uint256"}],"name":"exportMigrationPackage","outputs":[{"internalType":"address[]","name":"players","type":"address[]"},{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"fluxrate","type":"uint256"},{"internalType":"uint256","name":"syncrate","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"nethereumDebt","type":"uint256"},{"internalType":"uint256","name":"miningStartTime","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"gameFluxrate","type":"uint256"},{"internalType":"uint256","name":"gameSyncrate","type":"uint256"},{"internalType":"uint256","name":"gameExpiry","type":"uint256"},{"internalType":"uint256","name":"lastGamePlayTime","type":"uint256"},{"internalType":"uint256","name":"factionId","type":"uint256"},{"internalType":"uint256","name":"lastFactionChange","type":"uint256"},{"internalType":"bool","name":"hasStarterHangar","type":"bool"},{"internalType":"bool","name":"hasStarterShip","type":"bool"},{"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"internalType":"uint256","name":"shipIndex","type":"uint256"},{"internalType":"uint256","name":"lastHangarUpgrade","type":"uint256"},{"internalType":"uint256","name":"lastShipUpgrade","type":"uint256"},{"internalType":"bool","name":"claimedStarterNode","type":"bool"},{"internalType":"bool","name":"claimedStarterRelic","type":"bool"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"referralBonusPaid","type":"uint256"}],"internalType":"struct PlayerExportData[]","name":"playerData","type":"tuple[]"},{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256[]","name":"nodeIds","type":"uint256[]"},{"internalType":"uint256[]","name":"relicIds","type":"uint256[]"},{"internalType":"uint256[]","name":"crewIds","type":"uint256[]"}],"internalType":"struct PlayerAssetData[]","name":"assetData","type":"tuple[]"},{"internalType":"uint256","name":"totalPlayers","type":"uint256"},{"internalType":"bool","name":"isLastBatch","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"players","type":"address[]"}],"name":"exportPlayersAssetsBatch","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256[]","name":"nodeIds","type":"uint256[]"},{"internalType":"uint256[]","name":"relicIds","type":"uint256[]"},{"internalType":"uint256[]","name":"crewIds","type":"uint256[]"}],"internalType":"struct PlayerAssetData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"players","type":"address[]"}],"name":"exportPlayersBatch","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"fluxrate","type":"uint256"},{"internalType":"uint256","name":"syncrate","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"nethereumDebt","type":"uint256"},{"internalType":"uint256","name":"miningStartTime","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"gameFluxrate","type":"uint256"},{"internalType":"uint256","name":"gameSyncrate","type":"uint256"},{"internalType":"uint256","name":"gameExpiry","type":"uint256"},{"internalType":"uint256","name":"lastGamePlayTime","type":"uint256"},{"internalType":"uint256","name":"factionId","type":"uint256"},{"internalType":"uint256","name":"lastFactionChange","type":"uint256"},{"internalType":"bool","name":"hasStarterHangar","type":"bool"},{"internalType":"bool","name":"hasStarterShip","type":"bool"},{"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"internalType":"uint256","name":"shipIndex","type":"uint256"},{"internalType":"uint256","name":"lastHangarUpgrade","type":"uint256"},{"internalType":"uint256","name":"lastShipUpgrade","type":"uint256"},{"internalType":"bool","name":"claimedStarterNode","type":"bool"},{"internalType":"bool","name":"claimedStarterRelic","type":"bool"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"referralBonusPaid","type":"uint256"}],"internalType":"struct PlayerExportData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"exportPlayersRange","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factionChangeCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"factions","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"factionFluxrate","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"currentMembers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"gameIndex","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActiveFactions","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"factionFluxrate","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"currentMembers","type":"uint256"}],"internalType":"struct Faction[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActiveNodes","outputs":[{"components":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Node[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActiveRelics","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"enum RelicSource","name":"source","type":"uint8"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"claimedCount","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Relic[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllNodes","outputs":[{"components":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Node[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllRelics","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"enum RelicSource","name":"source","type":"uint8"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"claimedCount","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Relic[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractCollection","type":"address"}],"name":"getCrewTemplate","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"enum CrewType","name":"crewType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"getFreeStarterNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"getFreeStarterRelic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getNethereumPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"}],"name":"getPlayerCrewPaginated","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"enum CrewType","name":"crewType","type":"uint8"}],"internalType":"struct Crew[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerFaction","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"factionFluxrate","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"currentMembers","type":"uint256"}],"internalType":"struct Faction","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"getPlayerGameBonus","outputs":[{"internalType":"uint256","name":"syncrate","type":"uint256"},{"internalType":"uint256","name":"fluxrate","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"}],"name":"getPlayerNodesPaginated","outputs":[{"components":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Node[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"}],"name":"getPlayerRelicsPaginated","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"enum RelicSource","name":"source","type":"uint8"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"claimedCount","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"internalType":"struct Relic[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPlayersPaginated","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"getReferrals","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractCollection","type":"address"}],"name":"getTokenInfo","outputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"string","name":"slug","type":"string"},{"internalType":"bool","name":"isVerified","type":"bool"},{"internalType":"string","name":"chain","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hangarCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hangars","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxRelics","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialHangarPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initializedStarterHangar","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initializedStarterShip","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPlayerRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"factionId","type":"uint256"}],"name":"joinFaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastFactionChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastGamePlayTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastHangarUpgradeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastShipUpgradeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFactionMembers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"string","name":"slug","type":"string"},{"internalType":"bool","name":"isVerified","type":"bool"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"enum CrewType","name":"crewType","type":"uint8"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"}],"name":"modifyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nethereum","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nodeSecondHandMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nodes","outputs":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerToHangar","outputs":[{"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"internalType":"uint256","name":"maxRelics","type":"uint256"},{"internalType":"uint256","name":"currRelics","type":"uint256"},{"internalType":"uint256","name":"currShip","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerToShip","outputs":[{"internalType":"uint256","name":"shipIndex","type":"uint256"},{"internalType":"uint256","name":"maxNodes","type":"uint256"},{"internalType":"uint256","name":"currNodes","type":"uint256"},{"internalType":"uint256","name":"maxCrew","type":"uint256"},{"internalType":"uint256","name":"currCrew","type":"uint256"},{"internalType":"uint256","name":"totalArcOutput","type":"uint256"},{"internalType":"uint256","name":"currArcOutput","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameIndex","type":"uint256"}],"name":"playGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerActiveGameIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerCrewId","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"enum CrewType","name":"crewType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerCrewOccupiedCoords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerCrewOwned","outputs":[{"internalType":"uint256","name":"_spacer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerFaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerFluxrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerGameExpiry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerGameFluxrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerGameSyncrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerMiningStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerNethereumDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"playerNethereumPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerNodesId","outputs":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"arcConsumption","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerNodesOccupiedCoords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerNodesOwned","outputs":[{"internalType":"uint256","name":"_spacer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerPendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerRelicInventory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerRelicsId","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"enum RelicSource","name":"source","type":"uint8"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"claimedCount","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerRelicsOccupiedCoords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerRelicsOwned","outputs":[{"internalType":"uint256","name":"_spacer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerSyncrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"purchaseInitialHangar","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralBonusPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"referredUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"relicSecondHandMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"relics","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"fluxRate","type":"uint256"},{"internalType":"uint256","name":"syncRate","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"enum RelicSource","name":"source","type":"uint8"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"address","name":"claimToken","type":"address"},{"internalType":"bool","name":"claimTokenIsERC721","type":"bool"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"claimedCount","type":"uint256"},{"internalType":"uint256","name":"maxPerPlayer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"relicsClaimedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requireCrewSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsGameEndedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"sellNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"relicId","type":"uint256"}],"name":"sellRelic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"}],"name":"setBurnPct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cooldown","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"factionId","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setFactionActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_initialPrice","type":"uint256"}],"name":"setInitialHangarPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCap","type":"uint256"}],"name":"setMaxFactionMembers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nethereum","type":"address"}],"name":"setNethereum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setReferralFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setRelicClaimSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_require","type":"bool"}],"name":"setRequireCrewSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vitalekh","type":"address"}],"name":"setVitalekh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shipCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ships","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxNodes","type":"uint256"},{"internalType":"uint256","name":"maxCrew","type":"uint256"},{"internalType":"uint256","name":"totalArcOutput","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"},{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"timeUntilNextHangarUpgrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"}],"name":"timeUntilNextShipUpgrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameIndex","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"name":"toggleGameActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hangarIndex","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"name":"toggleHangarProduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeIndex","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"name":"toggleNodeProduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"relicIndex","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"name":"toggleRelicProduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shipIndex","type":"uint256"},{"internalType":"bool","name":"inProduction","type":"bool"}],"name":"toggleShipProduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"bool","name":"isVerified","type":"bool"}],"name":"toggleTokenVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractCollection","type":"address"}],"name":"tokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"address","name":"contractCollection","type":"address"},{"internalType":"string","name":"slug","type":"string"},{"internalType":"bool","name":"isVerified","type":"bool"},{"internalType":"string","name":"chain","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFactions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFluxrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSyncrate","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":"address","name":"contractCollection","type":"address"}],"name":"unassignCrew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniqueGameCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniqueNodeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniqueRelicCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"universalCrewId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"string","name":"chainName","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verifyOwnershipSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"vitalekh","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawNethereum","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x9c4d535b000000000000000000000000000000000000000000000000000000000000000001002261f17bb0ecd50dc2e5028714717db1c7a394d52c342c1b10ab37a5a11200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x00040000000000020034000000000002000000000601034f00000000010600190000006001100270000020820010019d00002082011001970003000000160355000200000006035500000001002001900000002a0000c13d000004e002000039000000400020043f000000040010008c0000732e0000413d000000000316034f000004000000043f000000000206043b000000e002200270000020a30020009c0000006f0000a13d000020a40020009c0000015f0000a13d000020a50020009c000001720000213d000020c20020009c000002df0000a13d000020c30020009c000005650000a13d000020c40020009c00000e970000213d000020c80020009c00001a600000613d000020c90020009c0000169c0000613d000020ca0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000240100003900001ed40000013d0000010001000039000000400010043f0000000001000416000000000001004b0000732e0000c13d0000000006000411000000000006004b000000370000c13d000020a101000041000001000010043f000001040000043f000020a2010000410000820300010430000000000100041a0000208302100197000000000262019f000000000020041b00000000020004140000208405100197000020820020009c0000208202008041000000c00120021000002085011001c70000800d0200003900000003030000390000208604000041820181f70000040f00000001002001900000732e0000613d00002087010000410000000902000039000000000012041b00002088010000410000000c02000039000000000012041b00002089010000410000000d02000039000000000012041b0000208a010000410000000e02000039000000000012041b0000208b010000410000001c02000039000000000012041b0000208c010000410000002102000039000000000012041b00000064010000390000002202000039000000000012041b0000002a01000039000000000201041a0000208d02200197000000000021041b0000003f01000039000000000201041a000022500220019700000001022001bf000000000021041b0000002e02000039000000000102041a000000010110003a000001890000c13d0000220c0100004100000000001004350000001101000039000000040010043f000021a1010000410000820300010430000021160020009c000000bc0000213d0000214f0020009c0000019b0000a13d000021500020009c000002580000a13d000021510020009c000003d80000a13d000021520020009c000007f20000213d000021560020009c000019e60000613d000021570020009c0000143a0000613d000021580020009c0000732e0000c13d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000004402600370000000000202043b002100000002001d0000002402600370000000000202043b001c00000002001d00000000001004350000002601000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b000021b501000041000000040010043f002000000002001d00000000002004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b00002e8c0000c13d000000000201041a000000000002004b0000000002000019000000010200c03900002e8d0000613d0000000103100039000000000303041a000000000003004b00002e8d0000613d0000000201100039000000000101041a000000000001004b0000000302000039000000020200603900002e8d0000013d000021170020009c000001ba0000a13d000021180020009c000002670000a13d000021190020009c000004120000a13d0000211a0020009c000008170000213d0000211e0020009c00001a3e0000613d0000211f0020009c000014640000613d000021200020009c0000732e0000c13d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b001e00000001001d000020840010009c0000732e0000213d0000004401600370000000000301043b0000002401600370000000000201043b0000002a01000039000000000101041a0000ff0000100190000024c30000c13d001c00000003001d001d00000002001d00000000010004110000208401100197002100000001001d00000000001004350000002c01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000ff00200190000001120000c13d000022500220019700000001022001bf000000000021041b0000002b02000039000000000102041a000020930010009c000001950000213d0000000103100039000000000032041b0000000000200435000021920110009a000000000201041a00002083022001970000002103000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000001030000390000219304000041820181f70000040f00000001002001900000732e0000613d000004000100043d0000001e0200002900000000002104350000004701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000000400100043d002100000001001d000021ca0010009c000001950000213d00000021020000290000008001200039000000400010043f0000002003000029000000000103041a00002084011001970000000001120436001b00000001001d0000000101300039000000000201041a000000010320019000000001042002700000007f0440618f001f00000004001d0000001f0040008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400400043d001a00000004001d0000001f050000290000000004540436001900000004001d000000000003004b00003a980000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001f05000029000000000005004b0000000002000019000000190600002900003a9e0000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b000001570000413d00003a9e0000013d000020de0020009c000001cb0000a13d000020df0020009c000003690000a13d000020e00020009c000006490000a13d000020e10020009c00000efb0000213d000020e50020009c000023910000613d000020e60020009c00001d340000613d000020e70020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000340100003900001ed40000013d000020a60020009c000003140000a13d000020a70020009c000005790000a13d000020a80020009c00000edf0000213d000020ac0020009c00001a7d0000613d000020ad0020009c000017920000613d000020ae0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000000001000412002300000001001d002200600000003d000080050100003900000044030000390000000004000415000000230440008a00001a870000013d000000000012041b000000a00010043f000000400400043d0000208e0040009c000001950000813d0000016002400039000000400020043f0000000001140436002100000001001d000000400100043d0000208f0010009c000003830000a13d0000220c0100004100000000001004350000004101000039000000040010043f000021a10100004100008203000104300000216c0020009c000001e20000213d0000217a0020009c000005d60000213d000021810020009c000010790000a13d000021820020009c00001b410000613d000021830020009c000017d40000613d000021840020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b0000002b02000039000000000202041a000000000021004b0000732e0000813d8201733b0000040f0000000302200210000000000101041a000000000121022f0000208401100197000000ff0020008c0000000001002019000026430000013d000021340020009c000001f10000213d000021420020009c000005ea0000213d000021490020009c000010820000a13d0000214a0020009c00001b610000613d0000214b0020009c000017d90000613d0000214c0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000002b0100003900001ed40000013d000020fb0020009c0000033f0000213d000021090020009c000006da0000213d000021100020009c000012340000a13d000021110020009c000024cc0000613d000021120020009c000022e40000613d000021130020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000000001000412002700000001001d002600400000003d000080050100003900000044030000390000000004000415000000270440008a000006290000013d0000216d0020009c000006170000213d000021740020009c000010c10000a13d000021750020009c00001b6d0000613d000021760020009c0000185c0000613d000021770020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000000a0100003900001ed40000013d000021350020009c0000062f0000213d0000213c0020009c000010ca0000a13d0000213d0020009c00001b720000613d0000213e0020009c000018790000613d0000213f0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000302043b000020930030009c0000732e0000213d0000002302300039000000000012004b0000732e0000813d0000000402300039000000000226034f000000000202043b000020930020009c0000732e0000213d000000240430003900000005032002100000000005430019000000000015004b0000732e0000213d003000000002001d003100000004001d0000003f01300039000021b705100197000021c80050009c000001950000213d000004e001500039000000400010043f000004e00020043f000000000002004b000000000400001900003ba20000613d0000221c0050009c000001950000213d0000000004000019000002e005100039000000400050043f000002c0051000390000000000050435000002a00510003900000000000504350000028005100039000000000005043500000260051000390000000000050435000002400510003900000000000504350000022005100039000000000005043500000200051000390000000000050435000001e0051000390000000000050435000001c0051000390000000000050435000001a00510003900000000000504350000018005100039000000000005043500000160051000390000000000050435000001400510003900000000000504350000012005100039000000000005043500000100051000390000000000050435000000e0051000390000000000050435000000c0051000390000000000050435000000a0051000390000000000050435000000800510003900000000000504350000006005100039000000000005043500000040051000390000000000050435000000200510003900000000000504350000000000010435000005000540003900000000001504350000002004400039000000000034004b00003ba10000813d000000400100043d000021f90010009c000002200000a13d000001950000013d0000215f0020009c0000065c0000213d000021660020009c0000118a0000a13d000021670020009c00001ec50000613d000021680020009c00001ab60000613d000021690020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000001e0100003900001ed40000013d000021270020009c000006a00000213d0000212e0020009c000011a40000a13d0000212f0020009c00001ed80000613d000021300020009c00001ac00000613d000021310020009c0000732e0000c13d000000640010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b000020930020009c0000732e0000213d0000002303200039000000000013004b0000732e0000813d0000000403200039000000000336034f000000000303043b001b00000003001d000020930030009c0000732e0000213d001a00240020003d0000001b0200002900000005042002100000001a02400029000000000012004b0000732e0000213d0000002402600370000000000202043b000020930020009c0000732e0000213d0000002303200039000000000013004b0000732e0000813d0000000403200039000000000336034f000000000303043b001300000003001d000020930030009c0000732e0000213d001200240020003d000000130200002900000005032002100000001202300029000000000012004b0000732e0000213d0000004402600370000000000202043b000020930020009c0000732e0000213d0000002305200039000000000015004b0000732e0000813d0000000405200039000000000556034f000000000505043b001100000005001d000020930050009c0000732e0000213d001000240020003d000000110200002900000005022002100000001005200029000000000015004b0000732e0000213d0000003f01400039000021b701100197000021c80010009c000001950000213d000004e005100039001600000005001d000000400050043f0000001b05000029000004e00050043f000000000005004b00004be40000613d000021b10010009c0000001607000029000001950000213d000000600100003900000000050000190000016006700039000000400060043f00000020067000390000000000160435000001400670003900000000000604350000012006700039000000000006043500000100067000390000000000060435000000e0067000390000000000060435000000c0067000390000000000060435000000a0067000390000000000060435000000800670003900000000000604350000006006700039000000000006043500000040067000390000000000060435000000000007043500000500065000390000000000760435000000400700043d0000002005500039000000000045004b00004be30000813d000021b80070009c000002bf0000a13d000001950000013d000020d10020009c000006b20000213d000020d80020009c000011d90000a13d000020d90020009c000022910000613d000020da0020009c00001ca50000613d000020db0020009c0000732e0000c13d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d0000002401600370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d000000210100002900000000001004350000004701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000208400100198000034f20000c13d000000400100043d000022090200004100004b940000013d000020b50020009c000006c60000213d000020bc0020009c000011e20000a13d000020bd0020009c0000229e0000613d000020be0020009c00001caa0000613d000020bf0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000000000001004b0000000002000019000000010200c039000000000021004b0000732e0000c13d000000000200041a00002084032001970000000002000411000000000023004b0000264a0000c13d0000002a02000039000000000302041a0000225203300197000000000001004b000001000330c1bf000000000032041b000004e00010043f0000000001000414000020820010009c0000208201008041000000c0011002100000219b011001c70000800d0200003900000001030000390000219c04000041000003680000013d000020fc0020009c000006e70000213d000021030020009c000012770000a13d000021040020009c000024d30000613d000021050020009c0000235d0000613d000021060020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000000000001004b0000000002000019000000010200c039000000000021004b0000732e0000c13d000000000200041a00002084032001970000000002000411000000000023004b0000264a0000c13d0000002a02000039000000000302041a0000225003300197000000000313019f000000000032041b000004e00010043f0000000001000414000020820010009c0000208201008041000000c0011002100000219b011001c70000800d020000390000000103000039000021f3040000410000258f0000013d000020ee0020009c0000074a0000213d000020f50020009c000012b60000a13d000020f60020009c000025e40000613d000020f70020009c0000248f0000613d000020f80020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000003c01000039000000200010043f00000040020000390000000001000019820181c40000040f00001c3c0000013d0000004002100039000000400020043f0000002002100039000020900300004100000000003204350000000c02000039000000000021043500000120034000390000209102000041001f00000003001d0000000000230435000000e003400039000000010200008a001d00000003001d000000000023043500000140034000390000000102000039001e00000003001d0000000000230435000000c003400039001600000002001d001b00000003001d0000000000230435000000a0034000390000001402000039001a00000003001d0000000000230435000000210200002900000000001204350000010001400039001c00000001001d00000000000104350000008001400039001900000001001d00000000000104350000006001400039001800000001001d0000000000010435002000000004001d0000004001400039001700000001001d0000000000010435000000a00100043d00000000001004350000002f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020020000290000000002020433000000000101043b002000000001001d000000000021041b00000021010000290000000001010433001500000001001d0000000021010434001400000002001d002100000001001d000020930010009c000001950000213d00000020010000290000000106100039000000000106041a000000010210019000000001031002700000007f0330618f0000001f0030008c00000000010000190000000101002039000000000012004b000026590000613d0000220c0100004100000000001004350000002201000039000000040010043f000021a1010000410000820300010430000021590020009c00000f230000a13d0000215a0020009c000014200000613d0000215b0020009c000013b60000613d0000215c0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000002a01000039000000000101041a0000000402000039000000000202041a0000001303000039000000000303041a0000001e04000039000000000404041a0000003805000039000000000505041a0000003406000039000000000606041a0000002407000039000000000707041a0000002e08000039000000000808041a0000000809000039000000000909041a000000070a000039000000000a0a041a000000060b000039000000000b0b041a000000050c000039000000000c0c041a000000030d000039000000000d0d041a000004e000d0043f0000050000c0043f0000052000b0043f0000054000a0043f000005600090043f000005800080043f000005a00070043f000005c00060043f000005e00050043f000006000040043f000006200030043f000000ff002001900000000002000019000000010200c039000006400020043f000000ff001001900000000001000019000000010100c039000006600010043f0000223301000041000082020001042e000021210020009c00000f710000a13d000021220020009c0000142b0000613d000021230020009c000013c70000613d000021240020009c0000732e0000c13d000000e40010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b002100000002001d000020840020009c0000732e0000213d0000002402600370000000000302043b000020930030009c0000732e0000213d0000002302300039000000000012004b0000732e0000813d0000000404300039000000000a06034f000000000246034f000000000202043b000020930020009c000001950000213d0000001f0520003900002253055001970000003f055000390000225305500197000021c80050009c000001950000213d0000002403300039000004e005500039000000400050043f000004e00020043f0000000003320019000000000013004b00000000050a034f0000732e0000213d0000002003400039000000000335034f0000001f0420018f000000050520027200000005055002100000044c0000613d00000500060000390000050007500039000000000803034f000000008908043c0000000006960436000000000076004b000004480000c13d000000000004004b0000045a0000613d000000000353034f00000003044002100000050005500039000000000605043300000000064601cf000000000646022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000363019f00000000003504350000050002200039000000000002043500000000050a034f0000004402500370000000000302043b000000000003004b0000000002000019000000010200c039001e00000003001d000000000023004b0000732e0000c13d0000006402500370000000000302043b000020930030009c0000732e0000213d0000002302300039000000000012004b0000732e0000813d0000000404300039000000000245034f000000000202043b000020930020009c000001950000213d0000001f0520003900002253055001970000003f055000390000225305500197000000400600043d0000000005560019001d00000006001d000000000065004b00000000060000190000000106004039000020930050009c000001950000213d0000000100600190000001950000c13d0000002403300039000000400050043f0000001d050000290000000005250436001f00000005001d0000000003320019000000000013004b00000000030a034f0000732e0000213d0000002001400039000000000313034f0000001f0120018f0000000504200272000004950000613d00000005054002100000001f070000290000000005570019000000000603034f000000006806043c0000000007870436000000000057004b000004910000c13d000000000001004b000004a40000613d0000000504400210000000000343034f0000001f044000290000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000001f0120002900000000000104350000008401a00370000000000101043b001c00000001001d000000020010008c0000732e0000213d000000c401a00370000000000101043b001b00000001001d000000a401a00370000000000101043b001a00000001001d000000000100041a00002084021001970000000001000411000000000012004b000038140000c13d000004000100043d000000210200002900000000002104350000004701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000208400100198000003110000613d000000400100043d002000000001001d000021ca0010009c000001950000213d00000020030000290000008001300039000000400010043f00000060023000390000001d01000029001800000002001d000000000012043500000040023000390000001e01000029001700000002001d00000000001204350000002002300039000004e001000039001900000002001d000000000012043500000021020000290000000000230435000004000100043d00000000002104350000004701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200002900000000020204330000208402200197000000000301043b000000000103041a0000208301100197000000000121019f001600000003001d000000000013041b00000019010000290000000001010433001500000001001d0000000021010434001900000002001d002000000001001d000020930010009c000023580000213d00000016010000290000000101100039001400000001001d000000000101041a000000010010019000000001021002700000007f0220618f001300000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001301000029000000200010008c000005380000413d000004000100043d00000014020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000013010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000005380000813d000000000002041b0000000102200039000000000012004b000005340000413d00000020010000290000001f0010008c000058b20000a13d000004000100043d00000014020000290000000000210435000004000100043d000020820010009c001900000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000200220017f000000000101043b000000190020006b00005c580000813d000000190400002900002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000431001900000020030000390000000104400039000000150600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000055d0000c13d00005c590000013d000020cb0020009c00000ff00000a13d000020cc0020009c0000168b0000613d000020cd0020009c000013d30000613d000020ce0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000120100003900001ed00000013d000020af0020009c000010600000a13d000020b00020009c000016970000613d000020b10020009c000014100000613d000020b20020009c0000732e0000c13d000000c40010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b000020930020009c0000732e0000213d0000002303200039000000000013004b0000732e0000813d002000040020003d0000002003600360000000000303043b002100000003001d000020930030009c0000732e0000213d0000002403200039001e00000003001d001f00210030002d0000001f0010006b0000732e0000213d0000004401600370000000000101043b001d00000001001d0000006401600370000000000201043b000000000002004b0000000001000019000000010100c039001c00000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000034440000c13d0000002401600370000000000101043b000000a402600370000000000302043b0000008402600370000000000402043b00000000023400a9000000000004004b000005b40000613d00000000044200d9000000000034004b000000690000c13d000000000012004b000038210000c13d0000003801000039000000000101041a001b00000001001d00000000001004350000003901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000002030003670000008402300370000000000202043b000000000401043b0000000401400039000000000101041a000000000021004b000005d30000213d000000a401300370000000000101043b0000000504400039000000000404041a000000000014004b000042e90000a13d000000400100043d0000218c0200004100004b940000013d0000217b0020009c000010da0000a13d0000217c0020009c00001ba10000613d0000217d0020009c000018850000613d0000217e0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000001b0100003900001c8f0000013d000021430020009c000011130000a13d000021440020009c00001bd00000613d000021450020009c000018910000613d000021460020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000003501000039000000200010043f00000040020000390000000001000019820181c40000040f002100000001001d820173840000040f00000021070000290000000102700039000000000302041a0000000202700039000000000402041a0000000302700039000000000502041a0000000402700039000000000602041a0000000602700039000000000802041a0000000702700039000000000902041a0000000502700039000000000702041a0000000002010019000000400100043d002100000001001d000000ff0770018f820174cf0000040f0000002102000029000025db0000013d0000216e0020009c0000111c0000a13d0000216f0020009c00001bd50000613d000021700020009c000019a30000613d000021710020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000000001000412003300000001001d003200000000001d000080050100003900000044030000390000000004000415000000330440008a00000005044002100000218902000041820181d90000040f000004e00010043f0000218701000041000082020001042e000021360020009c000011400000a13d000021370020009c00001bed0000613d000021380020009c000019d10000613d000021390020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002000000001001d000020840010009c0000732e0000213d0000000a01000039000000000101041a001f00000001001d000000000001004b0000277e0000c13d000004e001000039000022070200004100004b940000013d000020e80020009c000011810000a13d000020e90020009c00001d1b0000613d000020ea0020009c00001a540000613d000020eb0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d820178d90000040f00000004010000390000000201100367000000000101043b0000001c02000039000012850000013d000021600020009c000011b30000a13d000021610020009c00001f0a0000613d000021620020009c00001b060000613d000021630020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000001d01000039000000200010043f00000040020000390000000001000019820181c40000040f0000000002010019001e00000002001d000000000102041a001f00000001001d0000000101200039820173840000040f0000001e030000290000000202300039000000000202041a002100000002001d0000000302300039000000000202041a002000000002001d0000000402300039000000000202041a001e00000002001d000000a002000039000000400400043d001d00000004001d000000200340003900000000002304350000001f020000290000000000240435000000a002400039820173d10000040f0000001d0400002900000080024000390000001e0300002900000000003204350000002002000029000000ff002001900000000002000019000000010200c039000000600340003900000000002304350000004002400039000000210300002900000000003204350000000001410049000020820010009c0000208201008041000020820040009c000020820400804100000060011002100000004002400210000000000121019f000082020001042e000021280020009c000011c30000a13d000021290020009c000021bc0000613d0000212a0020009c00001b350000613d0000212b0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b0000000000100435000000280100003900001ed00000013d000020d20020009c000011f20000a13d000020d30020009c000022aa0000613d000020d40020009c00001cb50000613d000020d50020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000001f0100003900001ed00000013d000020b60020009c000012080000a13d000020b70020009c000022d80000613d000020b80020009c00001cba0000613d000020b90020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000200100003900001ed00000013d0000210a0020009c000012870000a13d0000210b0020009c000024f70000613d0000210c0020009c000023870000613d0000210d0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000000100041a00001c3d0000013d000020fd0020009c000012ad0000a13d000020fe0020009c000024fe0000613d000020ff0020009c0000238c0000613d000021000020009c0000732e0000c13d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000101043b002100000001001d0000000401600370000000000101043b002000000001001d0000004401600370000000000201043b000000000002004b0000000001000019000000010100c039001f00000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000001301000039000000000101041a000000010110003a000000690000613d0000001302000039000000000012041b0000056002000039000000400020043f000004e00010043f0000002002000029000005000020043f0000002102000029000005200020043f0000001f02000029000005400020043f00000000001004350000004801000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000004e00200043d000000000021041b0000000102100039000005000300043d000000000032041b0000000202100039000005200300043d000000000032041b0000000301100039000000000301041a0000225002300197000005400300043d000000000003004b000000010220c1bf000000000021041b0000001301000039000000000501041a000000400100043d00000040021000390000001f03000029000000000032043500000020021000390000002103000029000000000032043500000020020000290000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021df011001c70000800d020000390000000203000039000021f2040000410000258f0000013d000020ef0020009c000012c90000a13d000020f00020009c000025fd0000613d000020f10020009c000024aa0000613d000020f20020009c0000732e0000c13d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000301043b0000000401600370000000000201043b0000002a01000039000000000101041a0000ff0000100190000024c30000c13d002000000003001d002100000002001d000000000100041100000000001004350000001b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000ff00200190000029740000c13d000022500220019700000001022001bf000000000021041b0000218901000041000000000010043900000000010004120000000400100443000000200100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b00000000001004350000002f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b820177cd0000040f000000000200041100000000002004350000003602000039000000200020043f001f00000001001d0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001e00000001001d0000000801100039000000000101041a000000210010006b00002d250000813d0000001e010000290000000901100039000000000101041a000000200010006b00002d250000813d000000000100041100000000001004350000003301000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000021020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000020020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0010019000002d250000c13d0000001e020000290000000101200039000000000101041a0000000202200039001d00000002001d000000000202041a000000000012004b000047a20000813d0000001e010000290000000601100039001b00000001001d000000000101041a0000001f02000029000000c002200039001c00000002001d0000000002020433000000000012001a000000690000413d00000000011200190000001e020000290000000502200039000000000202041a000000000021004b00004e6e0000a13d000000400100043d000021be0200004100004b940000013d000021530020009c00001a430000613d000021540020009c000014950000613d000021550020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d00002225010000410000000000100439000000000100041000000004001004430000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800a02000039820181fc0000040f0000000100200190000069a40000613d000000000301043b0000000201000039000000000201041a00000000010004140000208404200197000000040040008c000028a10000c13d0000000102000039000000010100003100002d300000013d0000211b0020009c00001a4f0000613d0000211c0020009c000015e20000613d0000211d0020009c0000732e0000c13d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000501043b0000000401600370000000000101043b0000002b02000039000000000402041a002d00000004001d000000000041004b0000264f0000813d000000000015001a000000690000413d0000000005150019000000000045004b0000000005048019002c00000005001d000000000515004b000000690000413d000020930050009c000001950000213d00000005075002100000003f06700039000021b706600197000021c80060009c000001950000213d000004e006600039000000400060043f000004e00050043f0000001f0670018f0000000508700272000008470000613d000005000700003900000005088002100000050008800039000000003903043c0000000007970436000000000087004b000008430000c13d000000000006004b000008490000613d002b04e00000003d000004000300043d000000000053004b000008600000813d0000225106100167000000000063004b000000690000213d0000000006130019000000000064004b00004e680000a13d0000000000200435000004e00700043d000000000037004b00004e680000a13d00000005073002100000050007700039000021920660009a000000000606041a000020840660019700000000006704350000000103300039000000000053004b000008500000413d000004e00300043d000020930030009c000001950000213d00000005013002100000003f02100039000021b702200197000000400400043d0000000002240019001f00000004001d000000000042004b00000000040000190000000104004039000020930020009c000001950000213d0000000100400190000001950000c13d000000400020043f0000001f020000290000000002320436000000000003004b000008ad0000613d0000000003000019000000400400043d000021f90040009c000001950000213d000002e005400039000000400050043f000002c0054000390000000000050435000002a00540003900000000000504350000028005400039000000000005043500000260054000390000000000050435000002400540003900000000000504350000022005400039000000000005043500000200054000390000000000050435000001e0054000390000000000050435000001c0054000390000000000050435000001a00540003900000000000504350000018005400039000000000005043500000160054000390000000000050435000001400540003900000000000504350000012005400039000000000005043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a0054000390000000000050435000000800540003900000000000504350000006005400039000000000005043500000040054000390000000000050435000000200540003900000000000504350000000000040435000000000532001900000000004504350000002003300039000000000013004b000008760000413d002a001f0000002d000004000100043d002900000001001d0000000402000039000000000202041a002800ff00200193000004e00500043d000004e003000039000000000051004b00000c300000813d000080100200003900000005011002100000000001130019000000200110003900000000010104330000208403100197000004000100043d001d00000003001d00000000003104350000001101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000003000414000020820030009c0000208203008041000000c003300210000000000131019f00002092011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000301041a000000280000002a000009c40000613d0000000601000039000000000101041a001e00000001001d000000000001004b0000801002000039000009c50000613d0000000301000039000000000601041a0000000801000039000000000101041a002000000001001d0000000501000039000000000101041a001f00000006001d000008e70000013d00000000030000190000001e023000fa000000200020002a002000200020002d000000690000413d002100000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000401043b0000002107000029000000000047004b0000001f06000029000009180000813d000000000367004b000000690000413d000021f10230012a0000000105200039000021f1015000d100000000055100d9000021f10050009c00004ed90000c13d000000000061001a000000690000413d0000000001610019000000000041004b0000000001048019000021f00030009c000000690000213d000000000471004b000000690000413d000021fd0030009c0000000003000019000008e30000213d000021880320027f00000000023400a900000000033200d9000000000043004b000000690000c13d000000000002004b000008e20000613d0000218e032000d100000000022300d90000218e0020009c000008e30000613d00004ed90000013d000004000100043d0000001d0200002900000000002104350000000f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002100000001001d0000001201000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000200110006b000000690000413d00200021001000bd000000210000006b000009490000613d000000210300002900000020023000f9000000000012004b000000690000c13d000004000100043d0000001d0200002900000000002104350000001001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002100000001001d0000004b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000001f0010006b000009960000a13d0000004901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000210010002a000000690000413d0000002102100029000009970000013d0000002102000029000000000002004b000009a10000613d000021fa012000d1000021fc0010009c00004ed90000213d00000000022100d9000021fa0020009c00004ed90000c13d000021fb0110009a000009a20000013d0000218e0100004100000020030000290000218e0230012a00210000002100ad0000218e0030009c000009aa0000413d00000021022000f9000000000012004b000000690000c13d000004000100043d0000001d0200002900000000002104350000001101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021020000290000218e0220012a000000000101043b000000000101041a000000000021001a000000690000413d00000000032100190000801002000039001f00000003001d000004000100043d0000001d0300002900000000003104350000003a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000003000414000020820030009c0000208203008041000000c003300210000000000131019f00002092011001c7820181fc0000040f00000001002001900000732e0000613d000000400200043d002100000002001d0000209b0020009c000001950000213d000000000101043b0000002104000029000000c002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a00000000003204350000000202100039000000000202041a000000400340003900000000002304350000000302100039000000000202041a000000600340003900000000002304350000000402100039000000000202041a00000080034000390000000000230435000000a0024000390000000501100039000000000101041a0000000000120435000004000100043d0000001d0200002900000000002104350000003601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000400200043d002000000002001d0000209e0020009c000001950000213d000000000101043b00000020040000290000014002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a00000000003204350000000202100039000000000202041a000000400340003900000000002304350000000302100039000000000202041a000000600340003900000000002304350000000402100039000000000202041a000000800340003900000000002304350000000502100039000000000202041a000000a00340003900000000002304350000000602100039000000000202041a000000c00340003900000000002304350000000702100039000000000202041a000000ff002001900000000002000019000000010200c039000000e00340003900000000002304350000000802100039000000000202041a0000010003400039000000000023043500000120024000390000000901100039000000000101041a0000000000120435000004000100043d0000001d0200002900000000002104350000000f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000002000010043f0000001001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000002400010043f0000001201000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001e00000001001d0000004101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001c00000001001d0000004001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001b00000001001d0000004a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001a00000001001d0000004901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001900000001001d0000004b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001800000001001d0000001501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001700000001001d0000001f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001600000001001d0000002001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001500000001001d0000001701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001400000001001d0000001801000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021020000290000000002020433002100000002001d000000000101043b000000000101041a001300000001001d00000020010000290000000001010433000001800010043f0000003b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000001c00010043f0000003701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000002a00010043f0000001b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0110018f000002800010043f0000001a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0110018f000002600010043f0000003c01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000208401100197000002200010043f0000003e01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000001e00010043f000000400200043d000001a00020043f000021f90020009c000001950000213d0000001401000029000000ff001001900000001301000029000000ff0110018f000002e003200039000000400030043f0000001d030000290000000000320435000001a00200043d0000002002200039000002000300043d0000000000320435000001a00200043d0000004002200039000002400300043d0000000000320435000001a00200043d00000060022000390000001f030000290000000000320435000001a00200043d00000080022000390000001e030000290000000000320435000001a00200043d000000a0022000390000001c030000290000000000320435000001a00200043d000000c0022000390000001b030000290000000000320435000001a00200043d000000e0022000390000001a030000290000000000320435000001a00200043d000001000220003900000019030000290000000000320435000001a00200043d000001200220003900000018030000290000000000320435000001a00200043d000001400220003900000017030000290000000000320435000001a00200043d000001600220003900000016030000290000000000320435000001a00200043d0000018002200039000000150300002900000000003204350000000002000019000000010200c039000001a00300043d000001a0033000390000000000230435000000000001004b0000000001000019000000010100c039000001a00200043d000001c0022000390000000000120435000001a00100043d000001e00110003900000021020000290000000000210435000001a00100043d0000020001100039000001800200043d0000000000210435000001a00100043d0000022001100039000001c00200043d0000000000210435000001a00100043d0000024001100039000002a00200043d0000000000210435000002800100043d000000000001004b0000000001000019000000010100c039000001a00200043d00000260022000390000000000120435000002600100043d000000000001004b0000000001000019000000010100c039000001a00200043d00000280022000390000000000120435000001a00100043d000002a001100039000002200200043d0000000000210435000001a00100043d000002c001100039000001e00200043d00000000002104350000002a01000029001f00000001001d00000000020104330000002901000029000000000012004b00004e680000a13d00000005021002100000001f0400002900000000022400190000002002200039000001a00300043d00000000003204350000000002040433000000000012004b00004e680000a13d002900010010003d00000001011000390000002b030000290000000005030433000000000051004b0000801002000039000008b80000413d000d00000003001d000020930050009c000001950000213d00000005015002100000003f03100039000021b703300197000000400200043d0000000003320019001000000002001d000000000023004b00000000040000190000000104004039000020930030009c000001950000213d0000000100400190000001950000c13d000000400030043f00000010020000290000000006520436000000000005004b00000c580000613d00000060020000390000000003000019000000400400043d000021ca0040009c000001950000213d0000008005400039000000400050043f0000006005400039000000000025043500000040054000390000000000250435000000200540003900000000002504350000000000040435000000000536001900000000004504350000002003300039000000000013004b00000c470000413d002000000006001d0000000d010000290000000021010434000c00000002001d000004000200043d000000000012004b00000e700000813d001100000002001d0000000502200210000e00000002001d0000000c0120002900000000010104330000208402100197000004000100043d000f00000002001d00000000002104350000003001000039000000200010043f000004000100043d000020820010009c00002082010080410000004001100210002121cb001001cb0000000001000414000020820010009c0000208201008041000000c00110021000000021011001af00002085011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001e00000001001d0000002601000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000000021011001af00002085011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001d00000001001d0000004401000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001c00000001001d000021b501000041000000040010043f0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b00000cb00000613d001a000100200278000080100200003900000cc10000013d000000000201041a000000000002004b0000000002000019000000010200c039001a00000002001d000080100200003900000cc10000613d0000000103100039000000000303041a000000000003004b00000cc10000613d0000000201100039000000000101041a000000000001004b00000003010000390000000201006039001a00000001001d000021b501000041000000040010043f0000001d0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b00000cd50000613d0019000100200278000080100200003900000ce60000013d000000000201041a000000000002004b0000000002000019000000010200c039001900000002001d000080100200003900000ce60000613d0000000103100039000000000303041a000000000003004b00000ce60000613d0000000201100039000000000101041a000000000001004b00000003010000390000000201006039001900000001001d000021b501000041000000040010043f0000001c0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b00000cfa0000613d0018000100200278000000200700002900000d0b0000013d000000000201041a000000000002004b0000000002000019000000010200c039001800000002001d000000200700002900000d0b0000613d0000000102100039000000000202041a000000000002004b00000d0b0000613d0000000201100039000000000101041a000000000001004b00000003010000390000000201006039001800000001001d0000001a01000029000020930010009c000001950000213d0000001a0100002900000005021002100000003f01200039000021b701100197000000400300043d0000000001130019001700000003001d000000000031004b00000000030000190000000103004039000020930010009c000001950000213d0000000100300190000001950000c13d000000400010043f00000017010000290000001a030000290000000001310436001400000001001d00000000010000310000000201100367000000050320027200000d2d0000613d000000050330021000000014050000290000000003350019000000000401034f000000004604043c0000000005650436000000000035004b00000d290000c13d0000001f0020019000000d2f0000613d0000001902000029000020930020009c000001950000213d000000190200002900000005022002100000003f03200039000021b703300197000000400400043d0000000003340019001600000004001d000000000043004b00000000040000190000000104004039000020930030009c000001950000213d0000000100400190000001950000c13d000000400030043f000000190300002900000016040000290000000003340436001300000003001d000000050320027200000d4f0000613d000000050330021000000013050000290000000003350019000000000401034f000000004604043c0000000005650436000000000035004b00000d4b0000c13d0000001f0020019000000d510000613d0000001802000029000020930020009c000001950000213d000000180200002900000005022002100000003f03200039000021b703300197000000400400043d0000000003340019001500000004001d000000000043004b00000000040000190000000104004039000020930030009c000001950000213d0000000100400190000001950000c13d000000400030043f000000180300002900000015040000290000000003340436001200000003001d000000050320027200000d700000613d000000050330021000000012040000290000000003340019000000001501043c0000000004540436000000000034004b00000d6c0000c13d0000001f0020019000000d720000613d000004000400043d0000001a0040006c00000dbd0000813d002100000004001d000021b501000041000000040010043f0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001b00000001001d000021b501000041000000040010043f0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b00000d9d0000613d00000001011002700000002007000029000000210400002900000dad0000013d000000000102041a000000000001004b0000000001000019000000010100c0390000002007000029000000210400002900000dad0000613d0000000103200039000000000303041a000000000003004b00000dad0000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000000041004b000051100000a13d00000017010000290000000001010433000000000041004b00004e680000a13d000000050140021000000014011000290000001b02000029000021b90020009c0000000002006019000000000021043500000001044000390000001a0040006c00000d750000413d000004000400043d000000190040006c00000e070000813d002100000004001d000021b501000041000000040010043f0000001d0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001e00000001001d000021b501000041000000040010043f0000001d0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b00000de70000613d00000001011002700000002007000029000000210400002900000df70000013d000000000102041a000000000001004b0000000001000019000000010100c0390000002007000029000000210400002900000df70000613d0000000103200039000000000303041a000000000003004b00000df70000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000000041004b000051100000a13d00000016010000290000000001010433000000000041004b00004e680000a13d000000050140021000000013011000290000001e02000029000021b90020009c000000000200601900000000002104350000000104400039000000190040006c00000dbf0000413d000004000400043d000000180040006c00000e500000813d002100000004001d000021b501000041000000040010043f0000001c0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001e00000001001d000021b501000041000000040010043f0000001c0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b00000e310000613d00000001011002700000002007000029000000210400002900000e410000013d000000000102041a000000000001004b0000000001000019000000010100c0390000002007000029000000210400002900000e410000613d0000000103200039000000000303041a000000000003004b00000e410000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000000041004b000051100000a13d00000015010000290000000001010433000000000041004b00004e680000a13d000000050140021000000012011000290000001e02000029000021b90020009c000000000200601900000000002104350000000104400039000000180040006c00000e090000413d000000400100043d000021ca0010009c000001950000213d0000008002100039000000400020043f0000006002100039000000150300002900000000003204350000004002100039000000160300002900000000003204350000002002100039000000170300002900000000003204350000000f02000029000000000021043500000010020000290000000002020433000000110020006c0000000d0300002900004e680000a13d0000000e02700029000000000012043500000010010000290000000001010433000000110010006c00004e680000a13d000000110200002900000001022000390000000001030433000000000012004b00000c5f0000413d000000400200043d002100000002001d000000a0010000390000000001120436002000000001001d000000a0022000390000000d01000029820173640000040f0000000002010019000000210120006a000000200300002900000000001304350000001f01000029820175240000040f0000000002010019000000210300002900000040013000390000000003320049000000000031043500000010010000298201763d0000040f000000210400002900000060024000390000002d0300002900000000003204350000002c0030006b00000000020000190000000102008039000000800340003900000000002304350000000001410049000020820040009c00002082040080410000004002400210000020820010009c00002082010080410000006001100210000000000121019f000082020001042e000020c50020009c00001a8d0000613d000020c60020009c000017970000613d000020c70020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000003901000039000000200010043f00000040020000390000000001000019820181c40000040f001e00000001001d820173840000040f0000001e030000290000000102300039000000000202041a002100000002001d0000000202300039000000000202041a002000000002001d0000000302300039000000000202041a001f00000002001d0000000402300039000000000202041a001d00000002001d0000000502300039000000000202041a001c00000002001d000000c002000039000000400300043d001b00000003001d0000000002230436001e00000002001d000000c002300039820173d10000040f0000001b04000029000000a0024000390000001c03000029000000000032043500000080024000390000001d0300002900000000003204350000001f02000029000000ff002001900000000002000019000000010200c0390000006003400039000000000023043500000040024000390000002003000029000000000032043500000021020000290000001e0300002900000000002304350000000001410049000020820010009c00002082010080410000006001100210000020820040009c00002082040080410000004002400210000000000121019f000082020001042e000020a90020009c00001aa30000613d000020aa0020009c0000179c0000613d000020ab0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000001701000039000000200010043f00000040020000390000000001000019820181c40000040f000000000101041a000000ff001001900000000001000019000000010100c039000004e00010043f0000218701000041000082020001042e000020e20020009c000023a30000613d000020e30020009c00001d3e0000613d000020e40020009c0000732e0000c13d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000002402600370000000000202043b002100000002001d00000000001004350000004d01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000210020006b000000210200002900004bd40000813d820173490000040f0000000302200210000000000101041a000000000121022f000017d10000013d0000215d0020009c000015ee0000613d0000215e0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000201043b0000002a01000039000000000101041a0000ff0000100190000024c30000c13d002100000002001d00000000010004110000208401100197002000000001001d00000000001004350000002c01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000ff0020019000000f670000c13d000022500220019700000001022001bf000000000021041b0000002b02000039000000000102041a000020930010009c000001950000213d0000000103100039000000000032041b0000000000200435000021920110009a000000000201041a00002083022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000001030000390000219304000041820181f70000040f00000001002001900000732e0000613d0000002102000029000000000002004b00000f6e0000613d0000001e01000039000000000101041a000000000012004b000032290000a13d000000400100043d000022390200004100004b940000013d000021250020009c000016860000613d000021260020009c0000732e0000c13d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b0000002402600370000000000202043b0000004403600370000000000303043b000000c00030043f000001000020043f000001400010043f0000002a01000039000000000101041a0000ff0000100190000024c30000c13d000000800000043f000000000100041100000000001004350000003a01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000c00300043d000000000201043b0000000401200039000000000101041a000001000400043d002100000004001d000000000014004b00004b920000813d0000000501200039000000000101041a000000000013004b00004b920000813d002000000003001d001f00000002001d000000000100041100000000001004350000002901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000021020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000020020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0010019000004b920000c13d000004000100043d000001400200043d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000400200043d002100000002001d000000000101043b0000000801100039000000000101041a000000ff00100190000041c40000c13d0000220d0100004100000021020000290000000000120435000020820020009c0000208202008041000000400120021000002190011001c70000820300010430000020cf0020009c000017a30000613d000020d00020009c0000732e0000c13d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000004401600370000000000401043b0000002401600370000000000301043b0000000401600370000000000201043b0000002a01000039000000000101041a0000ff0000100190000024c30000c13d001b00000004001d001c00000003001d001e00000002001d00000000002004350000002f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b820177cd0000040f000000000200041100000000002004350000003602000039000000200020043f001a00000001001d0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000301043b0000000801300039000000000101041a0000001c0010006b00002d250000813d0000000901300039000000000101041a0000001b0010006b00002d250000813d001900000003001d000000000100041100000000001004350000003301000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001c020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001b020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0010019000002d250000c13d0000001a010000290000010001100039001800000001001d0000000001010433000000000001004b000041d70000c13d000000400100043d000021c00200004100004b940000013d000020b30020009c000017af0000613d000020b40020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000601043b000020840060009c0000732e0000213d000000000100041a00002084021001970000000005000411000000000052004b000027790000c13d000000000006004b000028a80000c13d000020a101000041000004e00010043f000004e40000043f0000218b010000410000820300010430000021850020009c00001bfa0000613d000021860020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000130100003900001ed40000013d0000214d0020009c00001c2c0000613d0000214e0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000003d01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000301041a000000400200043d002100000002001d001f00000003001d0000000002320436002000000002001d000004000200043d0000000000120435000004000100043d000020820010009c001e00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001f040000290000001e05000029000000000045004b000030510000813d000000000101043b0000002003000029000000000201041a0000208402200197000000000323043600000001011000390000000105500039000000000045004b000010b90000413d000030520000013d000021780020009c00001c380000613d000021790020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000010100003900001c3c0000013d000021400020009c00001c410000613d000021410020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d820178d90000040f00000004010000390000000201100367000000000101043b0000000902000039000000000012041b000025920000013d0000217f0020009c00001c4b0000613d000021800020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000201043b0000002a01000039000000000101041a0000ff0000100190000024c30000c13d002100000002001d000000000100041100000000001004350000002601000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000021b502000041000000040020043f000004000200043d0000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002103000029000021b90030009c0000305c0000c13d000004000100043d000021dd020000410000000000210435000021de010000410000820300010430000021470020009c00001c550000613d000021480020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000030100003900001ed40000013d000021720020009c00001c840000613d000021730020009c0000732e0000c13d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d0000002401600370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000002102000029000000000002004b0000113c0000613d0000001e01000039000000000101041a000000000012004b000030700000a13d0000223901000041000004e00010043f0000218d0100004100008203000104300000213a0020009c00001c940000613d0000213b0020009c0000732e0000c13d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000004402600370000000000202043b002100000002001d0000002402600370000000000202043b001c00000002001d00000000001004350000004401000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b000021b501000041000000040010043f002000000002001d00000000002004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b000030920000c13d000000000201041a000000000002004b0000000002000019000000010200c039000030930000613d0000000103100039000000000303041a000000000003004b000030930000613d0000000201100039000000000101041a000000000001004b00000003020000390000000202006039000030930000013d000020ec0020009c00001d770000613d000020ed0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000050100003900001ed40000013d0000216a0020009c000021d00000613d0000216b0020009c0000732e0000c13d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000401043b0000000401600370000000000301043b000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000002e01000039000000000101041a000000000013004b000028160000a13d0000224501000041000004e00010043f0000218d010000410000820300010430000021320020009c0000220c0000613d000021330020009c0000732e0000c13d0000000002000416000000000002004b0000732e0000c13d820174450000040f002000000002001d002100000003001d0000208401100197000004000200043d000000000012043500000029010000390000262b0000013d000021640020009c000022130000613d000021650020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000100100003900001ed00000013d0000212c0020009c000022450000613d0000212d0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000000000200041a00002084032001970000000002000411000000000023004b0000264a0000c13d0000220f0010009c000012040000813d0000000d02000039000000000012041b0000000001000019000082020001042e000020dc0020009c000024110000613d000020dd0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d000000080100003900001ed40000013d000020c00020009c0000243e0000613d000020c10020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000001a010000390000141b0000013d000020d60020009c000024590000613d000020d70020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000000000200041a00002084032001970000000002000411000000000023004b0000264a0000c13d0000218e0010009c0000282e0000a13d0000221001000041000004e00010043f0000218d010000410000820300010430000020ba0020009c0000246f0000613d000020bb0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004701000039000000200010043f00000040020000390000000001000019820181c40000040f0000000002010019001e00000002001d000000000102041a002100000001001d0000000101200039820173840000040f0000001e030000290000000202300039000000000202041a001f00000002001d002000000001001d0000000301300039820173840000040f0000000005010019000000400300043d001e00000003001d000000210100002900002084021001970000001f01000029000000ff0410018f00000000010300190000002003000029820174130000040f0000001e02000029000025db0000013d000021140020009c000025500000613d000021150020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d0000000601000039000000000101041a000000000001004b000012c10000613d001f00000001001d0000000301000039000000000101041a002000000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0020002000100074000000690000413d0000002001000029000021f00010009c000000690000213d000000210100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020020000290000208202200197000021f10220012a000021880220027f000000000101043b000000000301041a00000000012300a9000000000003004b000012740000613d00000000033100d9000000000023004b000041840000c13d0000001f021000fa000000400100043d000012c30000013d000021070020009c000025550000613d000021080020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d820178d90000040f00000004010000390000000201100367000000000101043b0000002202000039000000000012041b000025920000013d0000210e0020009c000025610000613d0000210f0020009c0000732e0000c13d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000003a01000039000000200010043f00000040020000390000000001000019820181c40000040f0000000502100039000000000202041a0000000403100039000000000303041a0000000304100039000000000404041a0000000205100039000000000505041a0000000106100039000000000606041a000000000101041a000004e00010043f000005000060043f000005200050043f000005400040043f000005600030043f000005800020043f000021f401000041000082020001042e000021010020009c0000259c0000613d000021020020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d00000004010000390000261a0000013d000020f90020009c000026160000613d000020fa0020009c0000732e0000c13d0000000001000416000000000001004b0000732e0000c13d0000000401000039000000000101041a000000ff00100190000027320000c13d000004e00100003900000000020000190000000000210435000020820010009c0000208201008041000000400110021000002191011001c7000082020001042e000020f30020009c000026210000613d000020f40020009c0000732e0000c13d000000a40010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b002100000002001d000020840020009c0000732e0000213d0000004402600370000000000202043b000020840020009c0000732e0000213d0000006403600370000000000403043b000020930040009c0000732e0000213d0000002303400039000000000013004b0000732e0000813d0000000405400039000000000b06034f000000000356034f000000000303043b000020930030009c000001950000213d0000001f0630003900002253066001970000003f066000390000225306600197000021c80060009c000001950000213d0000002404400039000004e006600039000000400060043f000004e00030043f0000000004430019000000000014004b00000000060b034f0000732e0000213d0000002004500039000000000446034f0000001f0530018f0000000506300272000013030000613d000005000700003900000005086002100000050008800039000000000904034f000000009a09043c0000000007a70436000000000087004b000012ff0000c13d000000000005004b000013120000613d0000000506600210000000000464034f00000003055002100000050006600039000000000706043300000000075701cf000000000757022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000474019f0000000000460435000005000330003900000000000304350000008403b00370000000000303043b000020930030009c00004bd40000213d0000002304300039000000000014004b0000732e0000813d001f00040030003d0000001f04b00360000000000404043b002000000004001d000020930040009c0000732e0000213d0000002003300029001e00240030003d0000001e0010006b0000732e0000213d0000208403200197000000400100043d0000002002100039000000210400002900000000004204350000002404b00370000000000404043b0000008005100039000000800600003900000000006504350000006005100039000000000035043500000040031000390000000000430435000000a004100039000004e00300043d0000000000340435000000c004100039000000000003004b000013410000613d000000000500001900000000064500190000050007500039000000000707043300000000007604350000002005500039000000000035004b0000133a0000413d000000000443001900000000000404350000001f033000390000225305000041000000000353016f000000a0043000390000000000410435000000df03300039000000000453016f0000000003140019000000000043004b00000000040000190000000104004039000020930030009c000001950000213d0000000100400190000001950000c13d000000400030043f000020820020009c000020820200804100000040022002100000000001010433000020820010009c00002082010080410000006001100210000000000121019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000004000200043d000021e20300004100000000003204350000001c0010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000021e3011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020020000290000001f0220003900002253022001970000003f022000390000225303200197000000000101043b000000400200043d0000000003320019000000000023004b00000000040000190000000104004039000020930030009c000001950000213d0000000100400190000001950000c13d000000400030043f000000200300002900000000033204360000001e05000029000000000050007c0000732e0000213d00000020060000290000001f0460018f0000001f0500002900000020055000390000000205500367000000050660027200000005066002100000139c0000613d0000000007630019000000000805034f0000000009030019000000008a08043c0000000009a90436000000000079004b000013980000c13d000000000004004b000013aa0000613d000000000565034f00000000066300190000000304400210000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f000000000046043500000020043000290000000000040435000000400400043d0000000005020433000000410050008c0000523b0000c13d00000040052000390000000005050433000021e50050009c0000558e0000a13d000021e8010000410000523c0000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b001d00000001001d000020840010009c0000732e0000213d0000000401000039000000000101041a000000ff00100190000027560000c13d000004e0020000390000000001000019000026440000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000180100003900001c8f0000013d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000004402600370000000000202043b002100000002001d0000002402600370000000000202043b001c00000002001d00000000001004350000003001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b000021b501000041000000040010043f001f00000002001d00000000002004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b00002d670000c13d000000000201041a000000000002004b0000000002000019000000010200c03900002d680000613d0000000103100039000000000303041a000000000003004b00002d680000613d0000000201100039000000000101041a000000000001004b0000000302000039000000020200603900002d680000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000001901000039000000200010043f00000040020000390000000001000019820181c40000040f0000261a0000013d0000000001000416000000000001004b0000732e0000c13d0000000301000039000000000101041a000000000001004b0000268f0000c13d0000223401000041000004e00010043f0000218d010000410000820300010430000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d820173300000040f002100000001001d820178d90000040f0000003f01000039000000000201041a0000225002200197000000210000006b000000010220c1bf000000000021041b000025920000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000401043b0000000401600370000000000301043b000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000002401000039000000000101041a000000000013004b000024bf0000213d002000000004001d002100000003001d0000218901000041000000000010043900000000010004120000000400100443000000600100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b00002fd50000c13d000000400100043d0000222a0200004100004b940000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000003601000039000000200010043f00000040020000390000000001000019820181c40000040f0000000902100039000000000202041a0000000803100039000000000303041a0000000704100039000000000404041a0000000605100039000000000505041a0000000506100039000000000606041a0000000407100039000000000707041a0000000308100039000000000808041a0000000209100039000000000909041a000000010a100039000000000a0a041a000000000101041a000004e00010043f0000050000a0043f000005200090043f000005400080043f000005600070043f000005800060043f000005a00050043f000000ff004001900000000001000019000000010100c039000005c00010043f000005e00030043f000006000020043f0000220601000041000082020001042e000000e40010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b002100000002001d000020840020009c0000732e0000213d0000002402600370000000000302043b000020930030009c0000732e0000213d0000002302300039000000000012004b0000732e0000813d0000000404300039000000000a06034f000000000246034f000000000202043b000020930020009c000001950000213d0000001f0520003900002253055001970000003f055000390000225305500197000021c80050009c000001950000213d0000002403300039000004e005500039000000400050043f000004e00020043f0000000003320019000000000013004b00000000050a034f0000732e0000213d0000002003400039000000000335034f0000001f0420018f0000000505200272000014c70000613d000005000600003900000005075002100000050007700039000000000803034f000000008908043c0000000006960436000000000076004b000014c30000c13d000000000004004b000014d60000613d0000000505500210000000000353034f00000003044002100000050005500039000000000605043300000000064601cf000000000646022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000363019f00000000003504350000050002200039000000000002043500000000050a034f0000004402500370000000000302043b000000000003004b0000000002000019000000010200c039001f00000003001d000000000023004b0000732e0000c13d0000006402500370000000000302043b000020930030009c0000732e0000213d0000002302300039000000000012004b0000732e0000813d0000000404300039000000000245034f000000000202043b000020930020009c000001950000213d0000001f0520003900002253055001970000003f055000390000225305500197000000400600043d0000000005560019001e00000006001d000000000065004b00000000060000190000000106004039000020930050009c000001950000213d0000000100600190000001950000c13d0000002403300039000000400050043f0000001e050000290000000005250436001d00000005001d0000000003320019000000000013004b00000000030a034f0000732e0000213d0000002001400039000000000313034f0000001f0120018f0000000504200272000015110000613d00000005054002100000001d070000290000000005570019000000000603034f000000006806043c0000000007870436000000000057004b0000150d0000c13d000000000001004b000015200000613d0000000504400210000000000343034f0000001d044000290000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000001d0120002900000000000104350000008401a00370000000000101043b001c00000001001d000000020010008c0000732e0000213d000000c401a00370000000000101043b001a00000001001d000000a401a00370000000000101043b001b00000001001d000000000100041a00002084021001970000000001000411000000000012004b000038140000c13d000004000100043d000000210200002900000000002104350000004701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000400200043d002000000002001d000000000101043b000000000101041a000020840010019800004f7c0000c13d0000002001000029000021ca0010009c000001950000213d00000020030000290000008001300039000000400010043f00000060023000390000001e01000029001800000002001d000000000012043500000040023000390000001f01000029001700000002001d00000000001204350000002002300039000004e001000039001900000002001d000000000012043500000021020000290000000000230435000004000100043d00000000002104350000004701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200002900000000020204330000208402200197000000000301043b000000000103041a0000208301100197000000000121019f001600000003001d000000000013041b00000019010000290000000001010433001500000001001d0000000021010434001900000002001d002000000001001d000020930010009c000023580000213d00000016010000290000000101100039001400000001001d000000000101041a000000010010019000000001021002700000007f0220618f001300000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001301000029000000200010008c000015b50000413d000004000100043d00000014020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000013010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000015b50000813d000000000002041b0000000102200039000000000012004b000015b10000413d00000020010000290000001f0010008c000058b60000a13d000004000100043d00000014020000290000000000210435000004000100043d000020820010009c001900000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000200220017f000000000101043b000000190020006b00005cdb0000813d000000190400002900002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000431001900000020030000390000000104400039000000150600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000015da0000c13d00005cdc0000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004b0100003900001ed00000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b001e00000001001d000020840010009c0000732e0000213d0000002a01000039000000000101041a0000ff0000100190000024c30000c13d000000000100041100000000001004350000004401000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000004000200043d000000000101043b002000000001001d001d00000002001d002100000002001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000016220000613d0000000101100270000016300000013d000000000102041a000000000001004b0000000001000019000000010100c039000016300000613d0000000103200039000000000303041a000000000003004b000016300000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006b000037c20000813d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001f00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000016570000613d0000000101100270000016650000013d000000000102041a000000000001004b0000000001000019000000010100c039000016650000613d0000000103200039000000000303041a000000000003004b000016650000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006c000051100000a13d0000001f02000029000021b90020009c0000000002006019000004000100043d001f00000002001d00000000002104350000004501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000601100039000000000101041a0000001e0110014f0000002102000029002100010020003d00002084001001980000160e0000c13d000037c80000013d0000000001000416000000000001004b0000732e0000c13d000000090100003900001ed40000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000370100003900001ed00000013d0000000001000416000000000001004b0000732e0000c13d000000460100003900001ed40000013d000000e40010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b000020930020009c0000732e0000213d0000002303200039000000000013004b0000732e0000813d0000000403200039000000000436034f000000000404043b002100000004001d000020930040009c0000732e0000213d0000002404200039002000000004001d0000002102400029000000000012004b0000732e0000213d0000006401600370000000000101043b0000008402600370000000000402043b000000000004004b0000000002000019000000010200c039001f00000004001d000000000024004b0000732e0000c13d000000000906034f000000000200041a00002084042001970000000002000411000000000024004b0000264a0000c13d0000002e02000039000000000202041a000000010220003a000000690000613d0000002e04000039000000000024041b000000000001004b000016cf0000613d0000218e041000d100000000041400d90000218e0040009c000000690000c13d0000064004000039000000400040043f000004e00020043f00000021050000290000001f055000390000225305500197001c00000005001d0000003f055000390000225305500197000021b10050009c000001950000213d0000064005500039000000400050043f0000002003300039000000000339034f0000002105000029001e001f00500193000006400050043f001d00050050027a000016ec0000613d00000660050000390000001d0600002900000005066002100000066006600039000000000703034f000000007807043c0000000005850436000000000065004b000016e80000c13d0000001e0000006b000016fd0000613d0000001d050000290000000505500210000000000353034f0000001e0600002900000003066002100000066005500039000000000705043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f0000000000350435000000210300002900000660033000390000000000030435000005000040043f000005200020043f000004000300043d000005400030043f000005600030043f0000002404900370000000000404043b000005800040043f0000004404900370000000000404043b000005a00040043f0000218e011000d1001b00000001001d000005c00010043f0000001f01000029000005e00010043f000000a401900370000000000101043b000006000010043f000000c401900370000000000101043b000006200010043f00000000002304350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b000004e00100043d001a00000002001d000000000012041b000005000100043d001700000001001d0000000021010434001800000002001d001900000001001d000020930010009c000023580000213d0000001a010000290000000101100039001600000001001d000000000101041a000000010010019000000001021002700000007f0220618f001500000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001501000029000000200010008c000017650000413d000004000100043d00000016020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000019030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000015010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000017650000813d000000000002041b0000000102200039000000000012004b000017610000413d00000019010000290000001f0010008c000048c30000a13d000004000100043d00000016020000290000000000210435000004000100043d000020820010009c001800000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000190220017f000000000101043b000000180020006b00004ef80000813d000000180400002900002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000431001900000020030000390000000104400039000000170600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000178a0000c13d00004ef90000013d0000000001000416000000000001004b0000732e0000c13d000000070100003900001ab20000013d0000000001000416000000000001004b0000732e0000c13d000000220100003900001ed40000013d0000000001000416000000000001004b0000732e0000c13d0000218801000041000004e00010043f0000218701000041000082020001042e000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000490100003900001ed00000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000002402600370000000000202043b002100000002001d00000000001004350000003d01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000210020006b000000210200002900004bd40000813d820173490000040f0000000302200210000000000101041a000000000121022f0000208401100197000000ff0020008c0000000001002019000026430000013d0000000001000416000000000001004b0000732e0000c13d000000060100003900001ed40000013d000001040010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000302043b000020930030009c0000732e0000213d0000002302300039000000000012004b0000732e0000813d0000000404300039000000000906034f000000000246034f000000000202043b000020930020009c000001950000213d0000001f0520003900002253055001970000003f055000390000225305500197000021c80050009c000001950000213d0000002403300039000004e005500039000000400050043f000004e00020043f0000000003320019000000000013004b000000000309034f0000732e0000213d0000002001400039000000000113034f0000001f0320018f0000000504200272000018060000613d000005000500003900000005064002100000050006600039000000000701034f000000007807043c0000000005850436000000000065004b000018020000c13d000000000003004b000018150000613d0000000504400210000000000141034f00000003033002100000050004400039000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f000000000014043500000500012000390000000000010435000000000209034f0000008401200370000000000101043b002100000001001d000000a401200370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000038140000c13d0000002401900370000000000101043b000000e402900370000000000302043b000000c402900370000000000402043b00000000023400a9000000000004004b000018340000613d00000000044200d9000000000034004b000000690000c13d000000000012004b000018590000c13d0000003401000039000000000201041a000004000100043d001f00000002001d00000000002104350000003501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000000202000367000000c403200370000000000303043b000000000101043b0000000604100039000000000404041a000000000034004b000018590000213d000000e403200370000000000303043b0000000701100039000000000101041a000000000031004b000047840000a13d000000400100043d000022240200004100004b940000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000004801000039000000200010043f00000040020000390000000001000019820181c40000040f0000000302100039000000000202041a0000000203100039000000000303041a0000000104100039000000000404041a000000000101041a000004e00010043f000005000040043f000005200030043f000000ff002001900000000001000019000000010100c039000005400010043f0000224201000041000082020001042e000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000000f0100003900001ed00000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000440100003900001ed00000013d000001640010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b000020930020009c0000732e0000213d0000002303200039000000000013004b0000732e0000813d0000000405200039000000000356034f000000000303043b002100000003001d000020930030009c0000732e0000213d0000002403200039002000000003001d0000002102300029000000000012004b0000732e0000213d0000006401600370000000000101043b0000008402600370000000000302043b000000000003004b0000000002000019000000010200c039001f00000003001d000000000023004b0000732e0000c13d000000a402600370000000000302043b000000000003004b0000000002000019000000010200c039001e00000003001d000000000023004b0000732e0000c13d000000e402600370000000000202043b000020840020009c0000732e0000213d0000010403600370000000000303043b000000000003004b0000000004000019000000010400c039000000000043004b0000732e0000c13d000000000b06034f000000000400041a00002084064001970000000004000411000000000046004b00003f040000c13d0000002404000039000000000404041a000000010440003a000000690000613d0000002406000039000000000046041b000000000001004b000018d70000613d0000218e061000d100000000061600d90000218e0060009c000000690000c13d0000070006000039000000400060043f000004e00040043f00000021070000290000001f077000390000225307700197001c00000007001d0000003f077000390000225307700197000021ee0070009c000001950000213d0000070007700039000000400070043f000000200550003900000000055b034f0000002107000029001d001f00700193000007000070043f001b00050070027a000018f40000613d00000720070000390000001b0800002900000005088002100000072008800039000000000905034f000000009a09043c0000000007a70436000000000087004b000018f00000c13d0000001d0000006b000019050000613d0000001b070000290000000507700210000000000575034f0000001d0800002900000003088002100000072007700039000000000907043300000000098901cf000000000989022f000000000505043b0000010008800089000000000585022f00000000058501cf000000000595019f0000000000570435000000210500002900000720055000390000000000050435000005000060043f000004000500043d000005200050043f000005400050043f000005600040043f0000002406b00370000000000606043b000005800060043f0000004406b00370000000000606043b000005a00060043f0000218e011000d1001a00000001001d000005c00010043f0000001f01000029000005e00010043f000006000050043f0000001e01000029000006200010043f000000c401b00370000000000101043b000006400010043f000006600020043f000006800030043f0000012401b00370000000000101043b000006a00010043f0000014401b00370000006c00050043f000000000101043b000006e00010043f00000000004504350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b000004e00100043d001900000002001d000000000012041b000005000100043d001600000001001d0000000021010434001700000002001d001800000001001d000020930010009c000023580000213d00000019010000290000000101100039001500000001001d000000000101041a000000010010019000000001021002700000007f0220618f001400000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001401000029000000200010008c000019760000413d000004000100043d00000015020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000018030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000014010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000019760000813d000000000002041b0000000102200039000000000012004b000019720000413d00000018010000290000001f0010008c000052000000a13d000004000100043d00000015020000290000000000210435000004000100043d000020820010009c001700000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000180220017f000000000101043b000000170020006b000054620000813d000000170400002900002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000431001900000020030000390000000104400039000000160600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000199b0000c13d000054630000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000401043b0000000401600370000000000301043b000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d002000000004001d002100000003001d00000000003004350000002801000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002002000029000000000021041b000000400100043d0000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d02000039000000020300003900002247040000410000258e0000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b0000002a02000039000000000202041a0000ff0000200190000024c30000c13d000000000001004b000019e20000613d0000001302000039000000000202041a000000000021004b000028b40000a13d0000221b01000041000004e00010043f0000218d0100004100008203000104300000000001000416000000000001004b0000732e0000c13d0000002a01000039000000000101041a000000ff00100190000026aa0000c13d00000000010004110000208401100197002100000001001d00000000001004350000002c01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000ff0020019000001a210000c13d000022500220019700000001022001bf000000000021041b0000002b02000039000000000102041a000020930010009c000001950000213d0000000103100039000000000032041b0000000000200435000021920110009a000000000201041a00002083022001970000002103000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000001030000390000219304000041820181f70000040f00000001002001900000732e0000613d000000000100041182017b360000040f000004000100043d000000000200041100000000002104350000001101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002000000001001d000000000001004b000032550000c13d000000400100043d000022320200004100004b940000013d0000000001000416000000000001004b0000732e0000c13d000000140100003900001ed40000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000003b0100003900001ed00000013d0000000001000416000000000001004b0000732e0000c13d000000380100003900001ed40000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000410100003900001ed00000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000000101000039000000000201041a0000000201000039000000000101041a000021b303000041000004e00030043f0000000403600370000000000303043b0000208401100197000004e40010043f000005040030043f00000000010004140000208402200197000000040020008c000027990000c13d0000000109000031000000200090008c0000002009008039000027c00000013d0000000001000416000000000001004b0000732e0000c13d0000000001000412002500000001001d002400200000003d000080050100003900000044030000390000000004000415000000250440008a00000005044002100000218902000041820181d90000040f000004e00010043f0000218701000041000082020001042e000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000401043b0000000401600370000000000301043b000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000003401000039000000000101041a000000000013004b000027c90000a13d000021b001000041000004e00010043f0000218d010000410000820300010430000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000002601000039000000200010043f00000040020000390000000001000019820181c40000040f000000000101041a000004e00010043f0000218701000041000082020001042e000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000002f010000390000241a0000013d0000000001000416000000000001004b0000732e0000c13d0000002e01000039000000000101041a001f00000001001d000000000001004b000026b40000c13d000004e0040000390000000001000019000000000501001900000005011002100000003f02100039000021cc03200197001d00000004001d0000000002430019000000000032004b00000000030000190000000103004039000020930020009c000001950000213d0000000100300190000001950000c13d000000400020043f0000001d020000290000000006520436000000000005004b00001afd0000613d00000060020000390000000003000019000000400400043d000021b80040009c000001950000213d0000016005400039000000400050043f00000020054000390000000000250435000001400540003900000000000504350000012005400039000000000005043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000000000040435000000000536001900000000004504350000002003300039000000000013004b00001ade0000413d001e00000006001d0000001f0000006b00002acf0000c13d000000400200043d002100000002001d000000200100003900000000021204360000001d0100002900002e890000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004701000039000000200010043f00000040020000390000000001000019820181c40000040f0000056002000039000000400020043f002100000001001d000000000201041a0000208402200197000004e00020043f0000000101100039820173840000040f000005000010043f00000021020000290000000201200039000000000101041a000000ff001001900000000001000019000000010100c039000005200010043f0000000301200039820173840000040f0000000005010019000005400050043f000005000300043d000000400100043d002100000001001d000005200400043d000004e00200043d0000208402200197000000000004004b0000000004000019000000010400c039820174130000040f0000002102000029000025db0000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004a0100003900001ed00000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d0000002401600370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000002102000029000000000002004b00001b5d0000613d0000001301000039000000000101041a000000000012004b0000302b0000a13d0000224f01000041000004e00010043f0000218d010000410000820300010430000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000160100003900001ed00000013d0000000001000416000000000001004b0000732e0000c13d0000001c0100003900001ed40000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d0000002401600370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000218901000041000000000010043900000000010004120000000400100443000000600100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b00001b9e0000413d0000002401000039000000000101041a000000000012004b000034450000a13d000000400100043d0000221e0200004100004b940000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d0000002401600370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000218901000041000000000010043900000000010004120000000400100443000000400100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b00001bcd0000413d0000003801000039000000000101041a000000000012004b0000346d0000a13d000000400100043d0000224a0200004100004b940000013d0000000001000416000000000001004b0000732e0000c13d0000002a010000390000261a0000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004301000039000000200010043f000000400200003900000000010000190021000000060353820181c40000040f000000210200035f0000002402200370000000000202043b0000000000200435000000200010043f0000000001000019000000400200003900001ed30000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d820178d90000040f000000020100003900001ca00000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d000000210100002900000000001004350000003701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000000902000039000000000202041a000000000101043b000000000101041a002000000002001d001f00000001001d000000000012001a000000690000413d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d0000001f030000290000002002300029000000000101043b001f00000001001d000000000012004b0000000001000019000031d40000813d000026430000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000110100003900001ed00000013d0000000001000416000000000001004b0000732e0000c13d0000000201000039000000000101041a0000208401100197000004e00010043f0000218701000041000082020001042e000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000000b01000039000023660000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b0000000000100435000000320100003900001ed00000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d0000002401600370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000218901000041000000000010043900000000010004120000000400100443000000200100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b00001c810000413d0000002e01000039000000000101041a000000000012004b0000351b0000a13d000000400100043d000022210200004100004b940000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000002c01000039000000200010043f00000040020000390000000001000019820181c40000040f0000261a0000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d820178d90000040f0000000101000039000000000201041a000020830220019700000021022001af000000000021041b000025920000013d0000000001000416000000000001004b0000732e0000c13d0000000c0100003900001ed40000013d0000000002000416000000000002004b0000732e0000c13d820174450000040f002000000002001d002100000003001d0000208401100197000004000200043d000000000012043500000033010000390000262b0000013d0000000001000416000000000001004b0000732e0000c13d0000002e0100003900001ed40000013d000000240010008c0000732e0000413d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d0000002a01000039000000000101041a0000ff0000100190000024c30000c13d00000000010004110000208401100197002000000001001d00000000001004350000002c01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000ff0020019000001cf90000c13d000022500220019700000001022001bf000000000021041b0000002b02000039000000000102041a000020930010009c000001950000213d0000000103100039000000000032041b0000000000200435000021920110009a000000000201041a00002083022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000001030000390000219304000041820181f70000040f00000001002001900000732e0000613d0000001c01000039000000000101041a0000000002000416000000000012004b000032e40000c13d000004000100043d000000000200041100000000002104350000001701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff00100190000038720000c13d0000000001000411000000210010006b00003ae20000c13d000000400100043d0000219a0200004100004b940000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000501043b0000002b01000039000000000201041a0000000404600370000000000404043b000000000024004b0000264f0000813d000000000025004b000027e00000a13d000021ce01000041000004e00010043f0000002001000039000004e40010043f0000001701000039000005040010043f000021d101000041000005240010043f000021d0010000410000820300010430000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000002501000039000025a50000013d000000240010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b000020930020009c0000732e0000213d0000002303200039000000000013004b0000732e0000813d0000000403200039000000000336034f000000000303043b001000000003001d000020930030009c0000732e0000213d000f00240020003d000000100200002900000005022002100000000f03200029000000000013004b0000732e0000213d0000003f01200039000021b703100197000021c80030009c000001950000213d000004e001300039000000400010043f0000001004000029000004e00040043f000000000004004b0000000004000019000038760000613d000021c90030009c000001950000213d000000600300003900000000040000190000008005100039000000400050043f0000006005100039000000000035043500000040051000390000000000350435000000200510003900000000003504350000000000010435000005000540003900000000001504350000002004400039000000000024004b000038750000813d000000400100043d000021ca0010009c00001d650000a13d000001950000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000301043b0000000401600370000000000201043b0000002a01000039000000000101041a0000ff0000100190000024c30000c13d002000000003001d002100000002001d000000000100041100000000001004350000001a01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000ff00200190000029350000c13d000022500220019700000001022001bf000000000021041b0000003a01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001f00000001001d0000000401100039000000000101041a000000210010006b00004b920000813d0000001f010000290000000501100039000000000101041a000000200010006b00004b920000813d000000000100041100000000001004350000002901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000021020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000020020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0010019000004b920000c13d0000001f010000290000000201100039001e00000001001d000000000101041a000022510010009c000000690000613d0000001f020000290000000102200039000000000202041a000000000021004b000051130000813d0000218901000041000000000010043900000000010004120000000400100443000000600100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b00000000001004350000002501000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b820177150000040f0000002302000039000000000302041a001f00000003001d001d00010030003e000000690000613d0000001d03000029000000000032041b000000400200043d001c00000002001d000020950020009c000001950000213d00000160021000390000000002020433001800000002001d000000e0021000390000000002020433001900000002001d000000c0021000390000000002020433001a00000002001d000000a0021000390000000002020433001b00000002001d000000200110003900000000010104330000001c040000290000022002400039000000400020043f00000060034000390000002002000029001600000003001d000000000023043500000040034000390000002102000029001500000003001d00000000002304350000001d020000290000000002240436001700000002001d00000000001204350000218901000041000000000010043900000000010004120000000400100443000000600100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000001c0400002900000200034000390000000102000039001200000003001d0000000000230435000001c0034000390000209102000041001100000003001d00000000002304350000016002400039000f00000002001d0000001803000029000000000032043500000120024000390000000203000039001800000002001d0000000000320435000000e002400039001400000002001d00000019030000290000000000320435000000c002400039001900000002001d0000001a030000290000000000320435000000a002400039001a00000002001d0000001b0300002900000000003204350000008002400039001300000002001d0000000000120435000001e001400039001000000001001d0000000000010435000001a001400039000e00000001001d00000000000104350000018001400039000d00000001001d00000000000104350000014001400039000c00000001001d00000000000104350000010001400039001b00000001001d0000000000010435000000000100041100000000001004350000002901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000021020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000020020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b000000000100041100000000001004350000002601000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000021b502000041000000040020043f00000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000b00000001001d0000001f01000029000021d30010009c00004ecf0000613d0000000b020000290000225101200167000a00000001001d000000000101041a000000200020043f001f00000001001d000000000001004b000066ac0000c13d0000000b01000029000000000101041a000000000001004b000061400000c13d0000001d010000290000000b02000029000066c50000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000003e01000039000000200010043f00000040020000390000000001000019820181c40000040f000000000101041a000004e00010043f0000218701000041000082020001042e000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d000000210100002900000000001004350000003b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000000902000039000000000202041a000000000101043b000000000101041a002000000002001d001f00000001001d000000000012001a000000690000413d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d0000001f030000290000002002300029000000000101043b001f00000001001d000000000012004b0000000001000019000032140000813d000026430000013d000000440010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b001e00000002001d000020930020009c0000732e0000213d0000001e020000290000002302200039000000000012004b0000732e0000813d0000001e020000290000000402200039000000000226034f000000000202043b000f00000002001d000020930020009c0000732e0000213d0000001e02000029002000240020003d0000000f0200002900000005022002100000002002200029000000000012004b0000732e0000213d0000002402600370000000000202043b000c00000002001d000020930020009c0000732e0000213d0000000c020000290000002302200039000000000012004b0000732e0000813d0000000c020000290000000402200039000000000226034f000000000202043b000b00000002001d000020930020009c0000732e0000213d0000000c02000029001000240020003d0000000b0200002900000005022002100000001002200029000000000012004b0000732e0000213d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000000f0000006b000000000200001900003f090000c13d0000000b0020006c0000411d0000813d0000000c01000029001201640010003d001101440010003d001301240010003d001401040010003d001c00e40010003d001d00c40010003d002100a40010003d002000840010003d001f00640010003d001e00440010003d001500000002001d0000000501200210001800100010002d00000002020003670000001801200360000000000d01043b00000000040000310000000c0140006a000001830110008a0000223d031001970000223d05d00197000000000635013f000000000035004b00000000030000190000223d0300404100000000001d004b00000000010000190000223d010080410000223d0060009c000000000301c019000000000003004b0000732e0000c13d0000002401000039000000000b01041a0000001001d00029000000000312034f000000000303043b00000000051400490000001f0550008a0000223d065001970000223d07300197000000000867013f000000000067004b00000000060000190000223d06004041000000000053004b00000000050000190000223d050080410000223d0080009c000000000605c019000000000006004b0000732e0000c13d0000000001130019000000000312034f000000000303043b000020930030009c0000732e0000213d0000000005340049000000200f1000390000223d015001970000223d06f00197000000000716013f000000000016004b00000000010000190000223d0100404100000000005f004b00000000050000190000223d050020410000223d0070009c000000000105c019000000000001004b0000732e0000c13d0000002001d000290000001f05d000290000001e06d000290000002107d00029000000000772034f000000000662034f000000000552034f000000000112034f000000000101043b001b00000001001d000000000105043b001a00000001001d000000000106043b001900000001001d000000000607043b000000000006004b0000000001000019000000010100c039000000000016004b0000732e0000c13d0000001d01d00029000000000112034f000000000701043b000000000007004b0000000001000019000000010100c039000000000017004b0000732e0000c13d0000001c01d000290000001405d00029000000000552034f000000000112034f000000000101043b001700000001001d000000000a05043b0000208400a0009c0000732e0000213d0000001301d00029000000000112034f000000000c01043b00000000000c004b0000000001000019000000010100c03900000000001c004b0000732e0000c13d0000001201d000290000001105d00029000000000552034f000000000112034f000000000d01043b000000000e05043b000000400100043d000004200010043f000020950010009c000001950000213d0000022005100039000000400050043f0000000000b104350000001f0130003900002253011001970000003f011000390000225301100197000000400500043d0000000001150019000000000051004b00000000080000190000000108004039000020930010009c000001950000213d0000000100800190000001950000c13d000000400010043f00000000093504360000000001f30019000000000041004b0000732e0000213d00160000000b001d0000000008f2034f0000000501300272000000050410021000001fe80000613d000000000f490019000000000208034f0000000001090019000000002b02043c0000000001b104360000000000f1004b00001fe40000c13d0000001f0130019000001ff60000613d000000000248034f00000000044900190000000301100210000000000804043300000000081801cf000000000818022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000181019f000000000014043500000000013900190000000000010435000004200100043d00000020011000390000000000510435000004200100043d0000004001100039000004000200043d0000000000210435000004200100043d0000006001100039000004000200043d0000000000210435000004200100043d000000800110003900000016030000290000000000310435000004200100043d000000a00110003900000019020000290000000000210435000004200100043d000000c0011000390000001a020000290000000000210435000004200100043d000000e0011000390000001b020000290000000000210435000004200100043d00000100011000390000000000610435000004200100043d0000012001100039000004000200043d0000000000210435000004200100043d00000140011000390000000000710435000004200100043d000001600110003900000017020000290000000000210435000004200100043d00000180011000390000000000a10435000004200100043d000001a0011000390000000000c10435000004200100043d000001c0011000390000000000e10435000004200100043d000001e001100039000004000200043d0000000000210435000004200100043d00000200011000390000000000d10435000000010130003a000000690000613d0000002402000039000000000012041b000004000200043d00000000001204350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000501043b000004200100043d0000000021010434000000000015041b00000000030204330000000076030434000020930060009c000023580000213d0000000104500039000000000104041a000000010010019000000001081002700000007f0880618f0000001f0080008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d000000200080008c001b00000005001d001a00000004001d001900000006001d001700000003001d000020860000413d000f00000008001d001600000007001d000004000100043d0000000000410435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000019060000290000001f026000390000000502200270000000200060008c0000000002004019000000000301043b0000000f010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000001b050000290000001a040000290000001607000029000020860000813d000000000002041b0000000102200039000000000012004b000020820000413d0000001f0060008c000020b10000a13d000004000100043d0000000000410435000004000100043d000020820010009c001600000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000019060000290000225302600197000000000101043b0000001604000029000000000024004b0000001707000029000020bc0000813d00002251034001670000002004400039000000000042004b00000000040220190000000003430019000000050330027000000000033100190000000104300039000000200300003900000000057300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000020a90000c13d000020bd0000013d000000000006004b0000040001000039000000000107c0190000000302600210000022510220027f00002251022001670000000001010433000000000121016f0000000102600210000000000121019f000020cb0000013d0000002003000039000000000062004b000020c70000813d0000000302600210000000f80220018f000022510220027f000022510220016700000000037300190000000003030433000000000223016f000000000021041b000000010160021000000001011001bf0000001b050000290000001a04000029000000000014041b000004200100043d000000400210003900000000020204330000000203500039000000000023041b000000600210003900000000020204330000000303500039000000000023041b000000800210003900000000020204330000000403500039000000000023041b000000a00210003900000000020204330000000503500039000000000023041b000000c00210003900000000020204330000000603500039000000000023041b000000e00210003900000000020204330000000703500039000000000023041b0000000802500039000000000302041a000022500330019700000100041000390000000004040433000000000004004b000000010330c1bf000000000032041b00000120041000390000000004040433000000020040008c000044830000213d000020970330019700000008044002100000ff000440018f000000000334019f00000140041000390000000004040433000000000004004b00002098040000410000000004006019000000000343019f000000000032041b000001600210003900000000020204330000000903500039000000000023041b0000018002100039000000000202043300002084022001970000000a03500039000000000403041a0000209904400197000000000224019f000001a0041000390000000004040433000000000004004b0000209a040000410000000004006019000000000242019f000000000023041b000001c00210003900000000020204330000000b03500039000000000023041b000001e00210003900000000020204330000000c03500039000000000023041b0000000d0250003900000200011000390000000001010433000000000012041b00000002020003670000001801200360000000000301043b00000000040000310000000c0140006a000001830110008a0000223d051001970000223d06300197000000000756013f000000000056004b00000000050000190000223d05004041000000000013004b00000000010000190000223d010080410000223d0070009c000000000501c019000000000005004b0000732e0000c13d0000002401000039000000000101041a001b00000001001d0000001001300029000000000512034f000000000605043b00000000051400490000001f0550008a0000223d075001970000223d08600197000000000978013f000000000078004b00000000070000190000223d07004041000000000056004b00000000050000190000223d050080410000223d0090009c000000000705c019000000000007004b0000732e0000c13d0000000005160019000000000152034f000000000101043b000020930010009c0000732e0000213d0000000004140049000000200a5000390000223d054001970000223d06a00197000000000756013f000000000056004b00000000050000190000223d0500404100000000004a004b00000000040000190000223d040020410000223d0070009c000000000504c019000000000005004b0000732e0000c13d00000020043000290000001f053000290000001e063000290000002107300029000000000872034f000000000962034f000000000552034f000000000442034f000000000704043b000000000605043b000000000409043b000000000808043b000000000008004b0000000005000019000000010500c039000000000058004b0000732e0000c13d0000001d05300029000000000552034f000000000905043b000000000009004b0000000005000019000000010500c039000000000059004b0000732e0000c13d0000001c03300029000000000332034f000000000ca2034f000000000a03043b000000400200043d000000e0032000390000000000130435000000e0030000390000000003320436001a00000003001d0000010003200039000000050b100272000000050db00210000021840000613d000000000ed30019000000000f0c034f000000000b03001900000000f50f043c000000000b5b04360000000000eb004b000021800000c13d0000001f0b100190000021920000613d0000000005dc034f000000000cd30019000000030bb00210000000000d0c0433000000000dbd01cf000000000dbd022f000000000505043b000001000bb000890000000005b5022f0000000005b501cf0000000005d5019f00000000005c043500000000031300190000000000030435000000c0032000390000000000a30435000000a00320003900000000009304350000008003200039000000000083043500000060032000390000000000730435000000400320003900000000006304350000001a0300002900000000004304350000001f011000390000225301100197000022400010009c00002240010080410000006001100210000020820020009c00002082020080410000004002200210000000000121019f0000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000022410110009a0000800d0200003900000002030000390000221f040000410000001b05000029820181f70000040f00000001002001900000732e0000613d000000150200002900000001022000390000000b0020006c00001f520000413d000004000200043d0000411d0000013d0000000001000416000000000001004b0000732e0000c13d000000000100041a00002084021001970000000005000411000000000052004b000027790000c13d0000208301100197000000000010041b0000000001000414000020820010009c0000208201008041000000c00110021000002085011001c70000800d020000390000000303000039000020860400004100000000060000190000258f0000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002b01000039000000000501041a0000000402600370000000000202043b000000000052004b0000264f0000813d0000002404600370000000000404043b000000000024001a000000690000413d0000000004240019000000000054004b0000000004058019000000000524004b000000690000413d000020930050009c000001950000213d00000005065002100000003f07600039000021b707700197000021c80070009c000001950000213d000004e007700039000000400070043f000004e00050043f0000001f0560018f0000000507600272000021f80000613d000005000600003900000005077002100000050007700039000000003803043c0000000006860436000000000076004b000021f40000c13d000000000005004b000021fa0000613d000000000024004b0000280e0000a13d000000000302001900000000001004350000000005230049000004e00600043d000000000056004b00004e680000a13d00000005055002100000050005500039000021920630009a000000000606041a000020840660019700000000006504350000000103300039000000000043004b000021fd0000413d0000280e0000013d0000000001000416000000000001004b0000732e0000c13d000021f101000041000004e00010043f0000218701000041000082020001042e000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004901000039000000200010043f00000040020000390000000001000019820181c40000040f000000000101041a002100000001001d0000004a01000039000000200010043f00000000010000190000004002000039820181c40000040f000000000101041a002000000001001d0000004b01000039000000200010043f00000000010000190000004002000039820181c40000040f000000000101041a001f00000001001d0000800b0100003900000004030000390000000004000415000000340440008a00000005044002100000219d02000041820181d90000040f0000002102000029000004e00020043f0000002002000029000005000020043f0000001f02000029000005200020043f000000000012004b00000000010000190000000101002039000005400010043f0000224201000041000082020001042e000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000004401600370000000000101043b001700000001001d0000002401600370000000000101043b001e00000001001d0000000401600370000000000101043b001600000001001d0000002a01000039000000000101041a0000ff0000100190000024c30000c13d000000000100041100000000001004350000003301000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e020000290000000000200435000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000170200002900000021030000290000000000230435000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff001001900000356e0000c13d000000400100043d000022160200004100004b940000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004002000039000000200020043f00001ed20000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000150100003900001ed00000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d0000002401600370000000000201043b000000000002004b0000000001000019000000010100c039002000000002001d000000000012004b0000732e0000c13d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d000021890100004100000000001004390000000001000412000000040010044300000024000004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b000022d50000413d0000003401000039000000000101041a000000000012004b000036760000a13d000000400100043d000021c30200004100004b940000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000420100003900001ed00000013d000000240010008c0000732e0000413d0000000002000416000000000002004b0000732e0000c13d0000000402600370000000000202043b000020930020009c0000732e0000213d0000002303200039000000000013004b0000732e0000813d0000000403200039000000000436034f000000000404043b002100000004001d000020930040009c0000732e0000213d00000021022000290000002402200039000000000012004b0000732e0000213d000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000001e01000039000000000101041a0000058002000039000000400020043f00000021040000290000001f044000390000225304400197001e00000004001d0000003f044000390000225304400197000004e00010043f000021f60040009c000001950000213d0000058004400039000000400040043f00000021040000290020001f00400193001d00200030003d0000001d03600360000005800040043f001f00050040027a0000231e0000613d000005a0040000390000001f050000290000000505500210000005a005500039000000000603034f000000006706043c0000000004740436000000000054004b0000231a0000c13d000000200000006b0000232f0000613d0000001f040000290000000504400210000000000343034f00000020050000290000000305500210000005a004400039000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f00000000003404350000002103000029000005a0033000390000000000030435000005000020043f000004000200043d000005200020043f0000000103000039000005400030043f000005600020043f000000010110003a000000690000613d0000001e03000039000000000013041b00000000001204350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b000004e00100043d001c00000002001d000000000012041b000005000100043d001900000001001d0000000021010434001a00000002001d001b00000001001d000020930010009c000041210000a13d000004000100043d0000220c020000410000000000210435000000410100003900004edd0000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000004501000039000000200010043f00000040020000390000000001000019820181c40000040f0000000002010019002000000002001d000000000102041a002100000001001d0000000101200039820173840000040f00000020030000290000000202300039000000000402041a0000000302300039000000000502041a0000000402300039000000000602041a0000000502300039000000000702041a0000000702300039000000000902041a0000000802300039000000000202041a0000000603300039000000000803041a0000000003010019000000400100043d002000000001001d0000208408800197000000ff0a20018f0000002102000029820174f50000040f000025da0000013d0000000001000416000000000001004b0000732e0000c13d000000210100003900001ed40000013d0000000001000416000000000001004b0000732e0000c13d0000000e0100003900001ed40000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d00000000001004350000004701000039000000200010043f00000040020000390000000001000019820181c40000040f000000000101041a00002084001001980000261c0000013d0000000001000416000000000001004b0000732e0000c13d0000001e01000039000000000101041a001f00000001001d000000000001004b000026de0000c13d000004e00f0000390000000001000019000000000401001900000005011002100000003f02100039000021cc032001970000000002f30019000000000032004b00000000030000190000000103004039000020930020009c000001950000213d0000000100300190000001950000c13d000000400020043f00000000024f0436001d00000002001d000004000200043d000000000012004b000023d30000813d0000006003000039000000400400043d000021cd0040009c000001950000213d000000a005400039000000400050043f00000020054000390000000000350435000000800540003900000000000504350000006005400039000000000005043500000040054000390000000000050435000000000004043500000020022000390000000005f200190000000000450435000000000012004b000023c00000413d0000001f0000006b00002b820000c13d000000400100043d0000002002000039000000000321043600000000020f04330000000000230435000000400310003900000005042002100000000004340019000004000500043d000000000025004b000028590000813d000000a006000039000023f90000013d000000000b9a001900000000000b0435000000400b800039000000000b0b0433000000400c4000390000000000bc0435000000600b800039000000000b0b043300000000000b004b000000000b000019000000010b00c039000000600c4000390000000000bc043500000080044000390000008008800039000000000808043300000000008404350000001f04900039000022530440019700000000044a00190000000105500039000000000025004b000028590000813d0000000008140049000000400880008a0000000003830436000000200ff0003900000000080f043300000000a90804340000000009940436000000000a0a04330000000000690435000000a00c40003900000000b90a043400000000009c0435000000c00a400039000000000009004b000023e20000613d000000000c000019000000000dac0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc0003900000000009c004b000024090000413d000023e20000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000003101000039000000200010043f00000040020000390000000001000019820181c40000040f0000000002010019002000000002001d000000000102041a002100000001001d0000000101200039820173840000040f00000020030000290000000202300039000000000402041a0000000302300039000000000502041a0000000402300039000000000602041a0000000502300039000000000702041a0000000602300039000000000802041a0000000702300039000000000902041a0000000902300039000000000b02041a0000000a02300039000000000c02041a0000000802300039000000000202041a0000000003010019000000400100043d002000000001001d000000ff0a20018f0000002102000029820173e30000040f000025da0000013d0000000001000416000000000001004b0000732e0000c13d0000002a01000039000000000101041a0000ff0000100190000024c30000c13d000000000100041100000000001004350000001701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff00100190000029380000c13d000000400100043d000021ad0200004100004b940000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000401043b0000000401600370000000000301043b000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d0000003801000039000000000101041a000000000013004b000028320000a13d000021c601000041000004e00010043f0000218d010000410000820300010430000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000401043b0000000401600370000000000101043b000000000200041a00002084032001970000000002000411000000000023004b0000264a0000c13d000000000001004b000024bf0000613d0000002402000039000000000202041a000000000021004b000024bf0000213d00000000001004350000002501000039000000200010043f00000040020000390000000001000019002100000004001d820181c40000040f0000000b011000390000002102000029000000000021041b0000000001000019000082020001042e0000000001000416000000000001004b0000732e0000c13d0000002a01000039000000000101041a0000ff0000100190000024c30000c13d000000000100041100000000001004350000001801000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff00100190000029560000c13d000000400100043d000021ed0200004100004b940000013d000000640010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000004401600370000000000201043b0000002401600370000000000301043b0000000401600370000000000401043b0000002a01000039000000000101041a0000ff0000100190000024c30000c13d000000000004004b000024bf0000613d0000002401000039000000000101041a000000000014004b000029770000a13d0000222b01000041000004e00010043f0000218d010000410000820300010430000021ce01000041000004e00010043f0000002001000039000004e40010043f000005040010043f0000224b01000041000005240010043f000021d00100004100008203000104300000000001000416000000000001004b0000732e0000c13d0000218e01000041000004e00010043f0000218701000041000082020001042e000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b002100000001001d000020840010009c0000732e0000213d820178540000040f000004000100043d000000210200002900000000002104350000001f01000039000000200010043f000004000100043d002100000001001d0000004002000039820181c40000040f000000000101041a000000210200002900000000001204350000001d01000039000000200010043f000004000100043d0000004002000039820181c40000040f8201786a0000040f0000002002000039000000400300043d002100000003001d0000000002230436820176860000040f0000002102000029000025db0000013d0000000001000416000000000001004b0000732e0000c13d0000002a01000039000000000101041a0000ff00001001900000261c0000013d0000000001000416000000000001004b0000732e0000c13d0000002401000039000000000101041a001f00000001001d000000000001004b000027080000c13d000004e0040000390000000001000019000000000501001900000005011002100000003f02100039000021cc03200197001d00000004001d0000000002430019000000000032004b00000000030000190000000103004039000020930020009c000001950000213d0000000100300190000001950000c13d000000400020043f0000001d020000290000000006520436000000000005004b000025470000613d00000060020000390000000003000019000000400400043d000020950040009c000001950000213d0000022005400039000000400050043f0000002005400039000000000025043500000200054000390000000000050435000001e0054000390000000000050435000001c0054000390000000000050435000001a00540003900000000000504350000018005400039000000000005043500000160054000390000000000050435000001400540003900000000000504350000012005400039000000000005043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000000000040435000000000536001900000000004504350000002003300039000000000013004b0000251c0000413d001e00000006001d0000001f0000006b00002c1d0000c13d000000400200043d002100000002001d000000200100003900000000021204360000001d0100002900002fd20000013d0000000001000416000000000001004b0000732e0000c13d0000000d0100003900001ed40000013d000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b000020840010009c0000732e0000213d0000000000100435000000300100003900001ed00000013d000000440010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000002401600370000000000401043b0000000401600370000000000301043b000000000100041a00002084021001970000000001000411000000000012004b000025970000c13d002000000004001d002100000003001d00000000003004350000003201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002002000029000000000021041b000000400100043d0000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d020000390000000203000039000021f5040000410000002105000029820181f70000040f00000001002001900000732e0000613d000004000100043d000020820010009c000020820100804100002197011000d1000082020001042e0000218a02000041000004e00020043f000004e40010043f0000218b010000410000820300010430000000240010008c0000732e0000413d0000000001000416000000000001004b0000732e0000c13d0000000401600370000000000101043b00000000001004350000002701000039000000200010043f00000040020000390000000001000019820181c40000040f0000000002010019002000000002001d000000000102041a002100000001001d0000000101200039820173840000040f000000200c0000290000000202c00039000000000402041a0000000302c00039000000000502041a0000000402c00039000000000602041a0000000502c00039000000000702041a0000000602c00039000000000802041a0000000702c00039000000000902041a0000000902c00039000000000d02041a0000000802c00039000000000202041a0000000a03c00039000000000a03041a0000000b03c00039000000000b03041a0000000c03c00039000000000e0c0019000000000c03041a0000000d03e00039000000000e03041a0000000003010019000000400100043d002000000001001d000000000f000415000300000f0e001f000200000f0c001f000100000f0b001f000000a00ba00270000000ff0fb00195000020840ea00197000000080a200270000000ff0ba0018f000000ff0a20018f0000001002200270000000ff0c20018f0000002102000029820176ae0000040f00000020020000290000000001210049000020820010009c00002082010080410000006001100210000020820020009c00002082020080410000004002200210000000000121019f000082020001042e0000000001000416000000000001004b0000732e0000c13d0000002401000039000000000101041a001f00000001001d000020930010009c000001950000213d0000001f0100002900000005011002100000003f02100039000021b702200197000021c80020009c000001950000213d000004e005200039000000400050043f0000001f03000029000004e00030043f000000000003004b000029900000c13d002100000005001d00000020010000390000000002150436000004e00100003900002fd20000013d0000000001000416000000000001004b0000732e0000c13d0000002e01000039000000000101041a001f00000001001d000020930010009c000001950000213d0000001f0100002900000005011002100000003f02100039000021b702200197000021c80020009c000001950000213d000004e005200039000000400050043f0000001f03000029000004e00030043f000000000003004b000029c00000c13d002100000005001d00000020010000390000000002150436000004e00100003900002e890000013d0000000001000416000000000001004b0000732e0000c13d0000003f01000039000000000101041a000000ff001001900000000001000019000000010100c039000004e00010043f0000218701000041000082020001042e0000000002000416000000000002004b0000732e0000c13d820174450000040f002000000002001d002100000003001d0000208401100197000004000200043d00000000001204350000004c01000039000000200010043f000004000100043d001f00000001001d0000004002000039820181c40000040f00000020020000290000001f030000290000000000230435000000200010043f000004000100043d002000000001001d0000004002000039820181c40000040f000000210200002900000020030000290000000000230435000000200010043f000004000100043d0000004002000039820181c40000040f000000000101041a000000ff001001900000000001000019000000010100c039000000400200043d0000000000120435000020820020009c0000208202008041000000400120021000002191011001c7000082020001042e0000218a01000041000004e00010043f000004e40020043f0000218b010000410000820300010430000021ce01000041000004e00010043f0000002001000039000004e40010043f0000001901000039000005040010043f0000224601000041000005240010043f000021d0010000410000820300010430000000200030008c000026790000413d001200000003001d001300000006001d00000000006004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000012010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000001306000029000026790000813d000000000002041b0000000102200039000000000012004b000026750000413d00000021040000290000001f0040008c0000274a0000a13d001300000006001d00000000006004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021070000290000225302700198000000000101043b0000001508000029000029e40000c13d00000020030000390000001306000029000029f10000013d002100000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000021f10210012a0000000103200039000021f1023000d100000000033200d9000021f10030009c00004ed90000c13d0000002103000029000021f13030012a000000000032001a000000690000413d0000000002320019000000000112004b000000690000413d000026430000013d000021ce01000041000004e00010043f0000002001000039000004e40010043f0000001f01000039000005040010043f0000222c01000041000005240010043f000021d001000041000082030001043000000001030000390000000002000019000026be0000013d00000021020000290000002003000029000000010030003a000000690000413d0000001f0030006c00000001033000390000284a0000813d002100000002001d000004000100043d002000000003001d00000000003104350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000801100039000000000101041a000000ff00100190000026b70000613d0000002102000029000000010220003a0000002003000029000000690000613d000000010030003a000000690000413d000026bb0000013d00000001030000390000000002000019000026e80000013d00000021020000290000002003000029000000010030003a000000690000413d0000001f0030006c00000001033000390000284f0000813d002100000002001d000004000100043d002000000003001d00000000003104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000301100039000000000101041a000000ff00100190000026e10000613d0000002102000029000000010220003a0000002003000029000000690000613d000000010030003a000000690000413d000026e50000013d00000001030000390000000002000019000027120000013d00000021020000290000002003000029000000010030003a000000690000413d0000001f0030006c0000000103300039000028540000813d002100000002001d000004000100043d002000000003001d00000000003104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000801100039000000000101041a000000ff001001900000270b0000613d0000002102000029000000010220003a0000002003000029000000690000613d000000010030003a000000690000413d0000270f0000013d0000000301000039000000000101041a002100000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000210210006c000000690000413d000021f00020009c000000690000213d000000400100043d0000208202200197000021f10220012a000021880220027f000012c30000013d000000000004004b00000000010000190000274f0000613d000000140100002900000000010104330000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f000029fd0000013d0000000601000039000000000101041a001f00000001001d000000000001004b000028620000c13d0000001d0100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000d02000039000000000202041a0000218e0020009c000000690000213d000000000301041a000000000003004b0000000001000019000027760000613d0000218e0220009900000000013200a900000000033100d9000000000023004b000000690000c13d000000400200043d0000218e0110012a000026440000013d0000218a01000041000004e00010043f000004e40050043f0000218b0100004100008203000104300000000002000019002100000002001d00000000002004350000000b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000301043b0000000601300039000000000101041a0000208401100197000000200010006c00002ced0000613d000000210200002900000001022000390000001f0020006c0000277f0000413d000000400100043d000022070200004100004b940000013d000020820010009c0000208201008041000000c001100210000021b4011001c7820181f70000040f000004e008000039000000000301001900000060033002700000208203300197000000200030008c000000200900003900000000090340190000001f0490018f0000000505900272000027ad0000613d000000000601034f000000006706043c0000000008780436000005000080008c000027a90000c13d000000000004004b000027bc0000613d0000000505500210000000000651034f0000000304400210000004e005500039000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000100200190000029050000613d002100000009001d000004e0010000390000000002090019820173720000040f0000002101000029000004e002100039000004e001000039820177bf0000040f000012860000013d002000000004001d002100000003001d000021890100004100000000001004390000000001000412000000040010044300000024000004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b000030000000c13d000000400100043d000021af0200004100004b940000013d000000000545004b0000292b0000a13d000020930050009c000001950000213d00000005075002100000003f06700039000021b706600197000021c80060009c000001950000213d000004e006600039000000400060043f000004e00050043f0000001f0670018f0000000508700272000027f60000613d000005000700003900000005088002100000050008800039000000003903043c0000000007970436000000000087004b000027f20000c13d000000000006004b000027f80000613d000004000300043d000000000053004b0000280e0000813d0000225106400167000000000063004b000000690000213d0000000006430019000000000062004b00004e680000a13d0000000000100435000004e00700043d000000000037004b00004e680000a13d00000005073002100000050007700039000021920660009a000000000606041a000020840660019700000000006704350000000103300039000000000053004b000027fe0000413d000000400200043d002100000002001d00000020010000390000000002120436000004e001000039820173640000040f0000002102000029000025db0000013d002000000004001d002100000003001d0000218901000041000000000010043900000000010004120000000400100443000000200100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b000031a90000c13d000000400100043d000022440200004100004b940000013d0000000e02000039000000000012041b0000000001000019000082020001042e002000000004001d002100000003001d0000218901000041000000000010043900000000010004120000000400100443000000400100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000002102000029000000000012004b000031e90000c13d000000400100043d000021c50200004100004b940000013d0000000001020019000020930020009c000001950000213d000000400400043d00001aca0000013d0000000001020019000020930020009c000001950000213d000000400f00043d000023ad0000013d0000000001020019000020930020009c000001950000213d000000400400043d000025080000013d0000000002140049000020820020009c00002082020080410000006002200210000020820010009c00002082010080410000004001100210000000000112019f000082020001042e0000000301000039000000000601041a0000000801000039000000000101041a002000000001001d0000000501000039000000000101041a001e00000006001d000028700000013d00000000030000190000001f023000fa000000200020002a002000200020002d000000690000413d002100000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000401043b0000002107000029000000000047004b0000001e060000290000377a0000813d000000000367004b000000690000413d000021f10230012a0000000105200039000021f1015000d100000000055100d9000021f10050009c000000690000c13d000000000061001a000000690000413d0000000001610019000000000041004b0000000001048019000021f00030009c000000690000213d000000000471004b000000690000413d000021fd0030009c00000000030000190000286c0000213d000021880320027f00000000023400a900000000033200d9000000000043004b000000690000c13d000000000002004b0000286b0000613d0000218e032000d100000000022300d90000218e0020009c0000286c0000613d000000690000013d000020820010009c0000208201008041000000c001100210000000000003004b00002d280000c13d000000000204001900002d2b0000013d0000208301100197000000000161019f000000000010041b0000000001000414000020820010009c0000208201008041000000c00110021000002085011001c70000800d02000039000000030300003900002086040000410000258f0000013d00000000001004350000004801000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000400200043d000021ca0020009c000001950000213d000000000101043b0000008003200039000000400030043f000000000301041a00000000043204360000000103100039000000000303041a002100000004001d00000000003404350000000203100039000000000303041a0000004004200039002000000004001d000000000034043500000060022000390000000301100039000000000101041a000000ff001001900000000001000019000000010100c03900000000001204350000381e0000613d000004000100043d000000000200041100000000002104350000001501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b001e00000001001d0000001f0110006c000000690000413d0000000c02000039000000000202041a000000000021004b0000458b0000813d000000400100043d0000221b0200004100004b940000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000029160000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000029120000c13d000000000004004b000029250000613d0000000505500210000000000252034f00000000055100190000000304400210000000000605043300000000064601cf000000000646022f000000000202043b0000010004400089000000000242022f00000000024201cf000000000262019f00000000002504350000006002300210000020820010009c00002082010080410000004001100210000000000121019f0000820300010430000021ce01000041000004e00010043f0000002001000039000004e40010043f0000000d01000039000005040010043f000021cf01000041000005240010043f000021d0010000410000820300010430000000400100043d000021d20200004100004b940000013d000004000100043d000000000200041100000000002104350000003a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000000000201041a0000003801000039000000000101041a002100000002001d000000000012004b000035430000c13d000000400100043d000021ac0200004100004b940000013d000004000100043d000000000200041100000000002104350000003601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000000000201041a0000003401000039000000000101041a002100000002001d000000000012004b0000369e0000c13d000000400100043d000021ec0200004100004b940000013d000000400100043d000021d60200004100004b940000013d001c00000003001d001b00000002001d001e00000004001d00000000004004350000002501000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001a00000001001d0000000801100039001900000001001d000000000101041a000021d700100198000036c90000c13d000000400100043d000021e10200004100004b940000013d000021ee0020009c000001950000213d000000600200003900000000030000190000022004500039000000400040043f0000002004500039000000000024043500000200045000390000000000040435000001e0045000390000000000040435000001c0045000390000000000040435000001a00450003900000000000404350000018004500039000000000004043500000160045000390000000000040435000001400450003900000000000404350000012004500039000000000004043500000100045000390000000000040435000000e0045000390000000000040435000000c0045000390000000000040435000000a00450003900000000000404350000008004500039000000000004043500000060045000390000000000040435000000400450003900000000000404350000000000050435000005000430003900000000005404350000002003300039000000000013004b000032e70000813d000000400500043d000020950050009c000029940000a13d000001950000013d000021b10020009c000001950000213d000000600200003900000000030000190000016004500039000000400040043f00000020045000390000000000240435000001400450003900000000000404350000012004500039000000000004043500000100045000390000000000040435000000e0045000390000000000040435000000c0045000390000000000040435000000a00450003900000000000404350000008004500039000000000004043500000060045000390000000000040435000000400450003900000000000404350000000000050435000005000430003900000000005404350000002003300039000000000013004b000033a40000813d000000400500043d000021b80050009c000029c40000a13d000001950000013d000000010320008a0000000503300270000000000431001900000020030000390000000104400039000000130600002900000000058300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000029ea0000c13d000000000072004b000029fb0000813d0000000302700210000000f80220018f000022510220027f000022510220016700000000038300190000000003030433000000000223016f000000000021041b000000010170021000000001011001bf000000000016041b0000001701000029000000000101043300000020040000290000000202400039000000000012041b000000180100002900000000010104330000000302400039000000000012041b000000190100002900000000010104330000000402400039000000000012041b0000001a0100002900000000010104330000000502400039000000000012041b0000001b0100002900000000010104330000000602400039000000000012041b0000001d0100002900000000010104330000000702400039000000000012041b0000000801400039000000000201041a00002250022001970000001c030000290000000003030433000000000003004b000000010220c1bf000000000021041b0000001f0100002900000000010104330000000902400039000000000012041b0000000a014000390000001e020000290000000002020433000000000021041b0000002402000039000000000102041a000000010110003a000000690000613d000000000012041b000000e00010043f000000400200043d002100000002001d000020950020009c000001950000213d00000021030000290000022002300039000000400020043f0000000002030436002000000002001d000000400200043d0000208f0020009c000001950000213d0000004003200039000000400030043f0000002003200039000020960400004100000000004304350000000d0300003900000000003204350000002105000029000001c0045000390000209103000041001700000004001d000000000034043500000120045000390000000203000039001f00000004001d0000000000340435000000e004500039000000010300008a001e00000004001d000000000034043500000200045000390000000103000039001500000004001d00000000003404350000016004500039001300000004001d0000000000340435000000a004500039001d00000004001d00000000003404350000008003500039001b00000003001d000000000013043500000020010000290000000000210435000001e001500039001400000001001d0000000000010435000001a001500039001200000001001d00000000000104350000018001500039001100000001001d00000000000104350000014001500039001000000001001d00000000000104350000010001500039001c00000001001d0000000000010435000000c001500039001a00000001001d00000000000104350000006001500039001900000001001d00000000000104350000004001500039001800000001001d0000000000010435000000e00100043d00000000001004350000002501000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021020000290000000002020433000000000101043b002100000001001d000000000021041b00000020010000290000000001010433000f00000001001d0000000021010434000e00000002001d002000000001001d000020930010009c000001950000213d00000021010000290000000101100039000d00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000c00000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000000c01000029000000200010008c00002abb0000413d0000000d0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000c010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00002abb0000813d000000000002041b0000000102200039000000000012004b00002ab70000413d00000020010000290000001f0010008c00003b940000a13d0000000d0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000002002200180000000000101043b000044410000c13d00000020030000390000444e0000013d0000000106000039000004000100043d002100000001001d000004000100043d002000000006001d00000000006104350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000901043b000000080b90003900000000010b041a000000ff001001900000001e0500002900002b2e0000613d0000002107000029000000010870003a0000002006000029000000690000613d000000400a00043d000021b800a0009c000001950000213d0000016001a00039000000400010043f000000000109041a000000000c1a04360000000101900039000000000201041a0000000103200190000000010e2002700000007f0ee0618f0000001f00e0008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400d00043d0000000004ed0436000000000003004b00002b310000613d001500000004001d00160000000e001d00170000000d001d00180000000c001d00190000000b001d001a0000000a001d001b00000009001d001c00000008001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000160e00002900000000000e004b0000001c08000029000000190b00002900002b370000613d000000000201043b00000000010000190000001e05000029000000200600002900000021070000290000001b090000290000001a0a000029000000180c000029000000170d000029000000150f00002900000000031f0019000000000402041a0000000000430435000000010220003900000020011000390000000000e1004b00002b260000413d00002b3f0000013d0000002108000029000000200600002900002b7b0000013d0000225001200197000000000014043500000000000e004b0000002001000039000000000100601900002b3f0000013d00000000010000190000001e05000029000000200600002900000021070000290000001b090000290000001a0a000029000000180c000029000000170d0000290000003f0110003900002253021001970000000001d20019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000000000dc04350000000201900039000000000101041a0000004002a0003900000000001204350000000301900039000000000101041a0000006002a0003900000000001204350000000401900039000000000101041a0000008002a0003900000000001204350000000501900039000000000101041a000000a002a0003900000000001204350000000601900039000000000101041a000000c002a0003900000000001204350000000701900039000000000101041a000000e002a00039000000000012043500000000010b041a000000ff001001900000000001000019000000010100c0390000010002a0003900000000001204350000000901900039000000000101041a0000012002a0003900000000001204350000014001a000390000000a02900039000000000202041a00000000002104350000001d020000290000000001020433000000000071004b00004e680000a13d000000050170021000000000011500190000000000a104350000000001020433000000000071004b00004e680000a13d000000010060003a000000690000413d0000001f0060006c0000000106600039002100000008001d00002ad20000413d00001b000000013d0000000105000039000004000100043d002100000001001d001e0000000f001d000004000100043d002000000005001d00000000005104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000801043b000000030a80003900000000010a041a000000ff001001900000001e0f00002900002be20000613d0000002106000029000000010760003a0000002005000029000000690000613d000000400900043d000021cd0090009c000001950000213d000000a001900039000000400010043f000000000108041a000000000b1904360000000101800039000000000201041a0000000103200190000000010d2002700000007f0dd0618f0000001f00d0008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400c00043d0000000004dc0436000000000003004b00002be50000613d001500000004001d00160000000d001d00170000000c001d00180000000b001d00190000000a001d001a00000009001d001b00000008001d001c00000007001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000160d00002900000000000d004b0000001c07000029000000190a00002900002beb0000613d000000000201043b00000000010000190000001e0f000029000000200500002900000021060000290000001b080000290000001a09000029000000180b000029000000170c000029000000150e00002900000000031e0019000000000402041a0000000000430435000000010220003900000020011000390000000000d1004b00002bda0000413d00002bf30000013d0000002107000029000000200500002900002c160000013d0000225001200197000000000014043500000000000d004b0000002001000039000000000100601900002bf30000013d00000000010000190000001e0f000029000000200500002900000021060000290000001b080000290000001a09000029000000180b000029000000170c0000290000003f0110003900002253021001970000000001c20019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000000000cb04350000000201800039000000000101041a0000004002900039000000000012043500000000010a041a000000ff001001900000000001000019000000010100c0390000006002900039000000000012043500000080019000390000000402800039000000000202041a000000000021043500000000010f0433000000000061004b00004e680000a13d00000005016002100000001d01100029000000000091043500000000010f0433000000000061004b00004e680000a13d000000010050003a000000690000413d0000001f0050006c0000000105500039002100000007001d00002b860000413d000023d50000013d0000000106000039000004000100043d002100000001001d000004000100043d002000000006001d00000000006104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000901043b000000080b90003900000000010b041a000000ff001001900000001e0500002900002c7c0000613d0000002107000029000000010870003a0000002006000029000000690000613d000000400a00043d0000209500a0009c000001950000213d0000022001a00039000000400010043f000000000109041a000000000c1a04360000000101900039000000000201041a0000000103200190000000010e2002700000007f0ee0618f0000001f00e0008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400d00043d0000000004ed0436000000000003004b00002c7f0000613d001500000004001d00160000000e001d00170000000d001d00180000000c001d00190000000b001d001a0000000a001d001b00000009001d001c00000008001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000160e00002900000000000e004b0000001c08000029000000190b00002900002c850000613d000000000201043b00000000010000190000001e05000029000000200600002900000021070000290000001b090000290000001a0a000029000000180c000029000000170d000029000000150f00002900000000031f0019000000000402041a0000000000430435000000010220003900000020011000390000000000e1004b00002c740000413d00002c8d0000013d0000002108000029000000200600002900002ce60000013d0000225001200197000000000014043500000000000e004b0000002001000039000000000100601900002c8d0000013d00000000010000190000001e05000029000000200600002900000021070000290000001b090000290000001a0a000029000000180c000029000000170d0000290000003f0110003900002253021001970000000001d20019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000000000dc04350000000201900039000000000101041a0000004002a0003900000000001204350000000301900039000000000101041a0000006002a0003900000000001204350000000401900039000000000101041a0000008002a0003900000000001204350000000501900039000000000101041a000000a002a0003900000000001204350000000601900039000000000101041a000000c002a0003900000000001204350000000701900039000000000101041a000000e002a0003900000000001204350000010002a0003900000000010b041a000000ff001001900000000003000019000000010300c03900000000003204350000000802100270000000ff0220018f000000020020008c000044830000213d0000012003a000390000000000230435000021d7001001980000000001000019000000010100c0390000014002a0003900000000001204350000000901900039000000000101041a0000016002a0003900000000001204350000000a01900039000000000101041a0000018002a0003900002084031001970000000000320435000021da001001980000000001000019000000010100c039000001a002a0003900000000001204350000000b01900039000000000101041a000001c002a0003900000000001204350000000c01900039000000000101041a000001e002a0003900000000001204350000020001a000390000000d02900039000000000202041a00000000002104350000001d020000290000000001020433000000000071004b00004e680000a13d000000050170021000000000011500190000000000a104350000000001020433000000000071004b00004e680000a13d000000010060003a000000690000413d0000001f0060006c0000000106600039002100000008001d00002c200000413d0000254a0000013d001f00000003001d000000400100043d002100000001001d000021fe0010009c000001950000213d00000021020000290000012001200039000000400010043f0000001f03000029000000000103041a0000000001120436001d00000001001d0000000101300039000000000201041a000000010320019000000001042002700000007f0440618f001e00000004001d0000001f0040008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400400043d001c00000004001d0000001e050000290000000004540436001b00000004001d000000000003004b000038250000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001e05000029000000000005004b00000000020000190000001b060000290000382b0000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00002d1d0000413d0000382b0000013d000000400100043d000021c10200004100004b940000013d00002085011001c700008009020000390000000005000019820181f70000040f00030000000103550000006001100270000120820010019d0000208201100197000000000001004b00002d370000c13d0000000100200190000025920000c13d000000400100043d000022260200004100004b940000013d000020930010009c000001950000213d0000001f0310003900002253033001970000003f033000390000225304300197000000400300043d0000000004430019000000000034004b00000000050000190000000105004039000020930040009c000001950000213d0000000100500190000001950000c13d000000400040043f0000000003130436000004000500043d0000000004150019000000000014004b0000732e0000213d0000001f0410018f00000003055003670000000501100272000000050110021000002d580000613d0000000006130019000000000705034f0000000008030019000000007907043c0000000008980436000000000068004b00002d540000c13d000000000004004b00002d320000613d000000000515034f00000000011300190000000303400210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f000000000031043500002d320000013d00000001022002700000001c0120006c00002e7c0000a13d000000210010006c0000002101008029001a00000001001d000020930010009c000001950000213d0000001a0100002900000005011002100000003f02100039000021b702200197000000400300043d0000000002230019001b00000003001d000000000032004b00000000030000190000000103004039000020930020009c000001950000213d0000000100300190000001950000c13d000000400020043f0000001b020000290000001a030000290000000002320436001d00000002001d000000000003004b00002e840000613d000000600200003900000000030000190000001d06000029000000400400043d000021b80040009c000001950000213d0000016005400039000000400050043f00000020054000390000000000250435000001400540003900000000000504350000012005400039000000000005043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000000000040435000000000563001900000000004504350000002003300039000000000013004b00002d870000413d002000000000001d000021b501000041000000040010043f0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000002003000029001e001c0030002d000000000101043b0000001e01100029000000000101041a002100000001001d000021b501000041000000040010043f0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b00002dcf0000613d00000001011002700000001e0400002900002dde0000013d000000000102041a000000000001004b0000000001000019000000010100c0390000001e0400002900002dde0000613d0000000103200039000000000303041a000000000003004b00002dde0000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000000041004b000051100000a13d0000002101000029000021b90010009c0000000001006019002100000001001d00000000001004350000003101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000701043b000000400600043d000021b80060009c0000001d05000029000001950000213d0000016001600039000000400010043f000000000107041a00000000081604360000000101700039000000000201041a0000000103200190000000010a2002700000007f0aa0618f0000001f00a0008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400900043d0000000004a90436000000000003004b00002e2b0000613d001500000004001d00160000000a001d001700000009001d001800000008001d001900000007001d001e00000006001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000160a00002900000000000a004b00002e310000613d000000000201043b00000000010000190000001d050000290000001e06000029000000190700002900000018080000290000001709000029000000150b00002900000000031b0019000000000402041a0000000000430435000000010220003900000020011000390000000000a1004b00002e230000413d00002e370000013d0000225001200197000000000014043500000000000a004b0000002001000039000000000100601900002e370000013d00000000010000190000001d050000290000001e060000290000001907000029000000180800002900000017090000290000003f0110003900002253021001970000000001920019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000000009804350000000201700039000000000201041a000000400160003900000000002104350000000302700039000000000202041a000000600360003900000000002304350000000402700039000000000202041a000000800360003900000000002304350000000502700039000000000202041a000000a00360003900000000002304350000000602700039000000000202041a000000c00360003900000000002304350000000702700039000000000202041a000000e00360003900000000002304350000000802700039000000000202041a000000ff002001900000000002000019000000010200c039000001000360003900000000002304350000000902700039000000000202041a0000012003600039000000000023043500000140026000390000000a03700039000000000303041a00000000003204350000001b0300002900000000020304330000002004000029000000000042004b00004e680000a13d0000000502400210000000000252001900000000006204350000000002030433000000000042004b00004e680000a13d000000210200002900000000002104350000000104400039002000000004001d0000001a0040006c00002da70000413d00002e840000013d000000400100043d001b00000001001d000021b60010009c000001950000213d0000001b020000290000002001200039000000400010043f0000000000020435000000400200043d002100000002001d000000200100003900000000021204360000001b01000029820175e80000040f0000002102000029000025db0000013d00000001022002700000001c0120006c00002fc50000a13d000000210010006c0000002101008029001a00000001001d000020930010009c000001950000213d0000001a0100002900000005011002100000003f02100039000021b702200197000000400300043d0000000002230019001b00000003001d000000000032004b00000000030000190000000103004039000020930020009c000001950000213d0000000100300190000001950000c13d000000400020043f0000001b020000290000001a030000290000000002320436001d00000002001d000000000003004b00002fcd0000613d000000600200003900000000030000190000001d06000029000000400400043d000020950040009c000001950000213d0000022005400039000000400050043f0000002005400039000000000025043500000200054000390000000000050435000001e0054000390000000000050435000001c0054000390000000000050435000001a00540003900000000000504350000018005400039000000000005043500000160054000390000000000050435000001400540003900000000000504350000012005400039000000000005043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000000000040435000000000563001900000000004504350000002003300039000000000013004b00002eac0000413d002100000000001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000002103000029001f001c0030002d000000000101043b0000001f01100029000000000101041a001e00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b00002eff0000613d000000010110027000002f0d0000013d000000000102041a000000000001004b0000000001000019000000010100c03900002f0d0000613d0000000103200039000000000303041a000000000003004b00002f0d0000613d0000000201200039000000000101041a000000000001004b000000030100003900000002010060390000001f0010006c000051100000a13d0000001e01000029000021b90010009c000000000100601900000000001004350000002701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000701043b000000400600043d000020950060009c0000001d05000029000001950000213d0000022001600039000000400010043f000000000107041a00000000081604360000000101700039000000000201041a0000000103200190000000010a2002700000007f0aa0618f0000001f00a0008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400900043d0000000004a90436000000000003004b00002f590000613d001600000004001d00170000000a001d001800000009001d001900000008001d001e00000007001d001f00000006001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000170a00002900000000000a004b00002f5f0000613d000000000201043b00000000010000190000001d050000290000001f060000290000001e0700002900000019080000290000001809000029000000160b00002900000000031b0019000000000402041a0000000000430435000000010220003900000020011000390000000000a1004b00002f510000413d00002f650000013d0000225001200197000000000014043500000000000a004b0000002001000039000000000100601900002f650000013d00000000010000190000001d050000290000001f060000290000001e07000029000000190800002900000018090000290000003f0110003900002253021001970000000001920019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000000009804350000000201700039000000000101041a000000400260003900000000001204350000000301700039000000000101041a000000600260003900000000001204350000000401700039000000000101041a000000800260003900000000001204350000000501700039000000000101041a000000a00260003900000000001204350000000601700039000000000101041a000000c00260003900000000001204350000000701700039000000000101041a000000e002600039000000000012043500000100026000390000000801700039000000000101041a000000ff001001900000000003000019000000010300c03900000000003204350000000802100270000000ff0220018f000000020020008c000044830000213d00000120036000390000000000230435000021d7001001980000000001000019000000010100c039000001400260003900000000001204350000000901700039000000000101041a000001600260003900000000001204350000000a01700039000000000101041a000001800260003900002084031001970000000000320435000021da001001980000000001000019000000010100c039000001a00260003900000000001204350000000b01700039000000000101041a000001c00260003900000000001204350000000c01700039000000000101041a000001e002600039000000000012043500000200016000390000000d02700039000000000202041a00000000002104350000001b0200002900000000010204330000002103000029000000000031004b00004e680000a13d0000000501300210000000000151001900000000006104350000000001020433000000000031004b00004e680000a13d0000000103300039002100000003001d0000001a0030006c00002ed80000413d00002fcd0000013d000000400100043d001b00000001001d000021b60010009c000001950000213d0000001b020000290000002001200039000000400010043f0000000000020435000000400200043d002100000002001d000000200100003900000000021204360000001b01000029820174550000040f0000002102000029000025db0000013d000004000100043d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000218e023000d1000000000101043b000000000003004b00002fef0000613d00000020032000fa0000218e0030009c00004ed90000c13d0000000701100039000000000021041b000000400100043d0000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d02000039000000020300003900002229040000410000258e0000013d000004000100043d00000000002104350000003501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000218e023000d1000000000101043b000000000003004b0000301a0000613d00000020032000fa0000218e0030009c00004ed90000c13d0000000401100039000000000021041b000000400100043d0000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d020000390000000203000039000021ae040000410000258e0000013d00000000002004350000004801000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000301100039000000000201041a00002250022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000002030000390000224e040000410000002105000029820181f70000040f00000001002001900000732e0000613d000025920000013d000000200300002900000021010000290000000002130049820173720000040f0000002001000039000000400200043d002000000002001d00000000021204360000002101000029820173640000040f000025da0000013d0000225102100167000000000003004b000021b903006041002000000003001d000000000202041a000000000002004b000034950000c13d000000000201041a000000200020006c000034b10000613d0000000102100039000000000202041a000000200020006c000034b10000613d0000000201100039000000000101041a000000200010006c000034b10000613d000004000100043d000034ac0000013d00000000002004350000001d01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000301100039000000000201041a00002250022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d02000039000000020300003900002248040000410000258e0000013d00000001022002700000001c0120006c000031990000a13d000000210010006c0000002101008029001a00000001001d000020930010009c000001950000213d0000001a0100002900000005011002100000003f02100039000021b702200197000000400300043d0000000002230019001b00000003001d000000000032004b00000000030000190000000103004039000020930020009c000001950000213d0000000100300190000001950000c13d000000400020043f0000001b020000290000001a030000290000000002320436001d00000002001d000000000003004b000031a10000613d000000600200003900000000030000190000001d06000029000000400400043d000021fe0040009c000001950000213d0000012005400039000000400050043f0000002005400039000000000025043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000000000040435000000000563001900000000004504350000002003300039000000000013004b000030b20000413d002100000000001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000002103000029001f001c0030002d000000000101043b0000001f01100029000000000101041a001e00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000030f60000613d00000001011002700000001f04000029000031050000013d000000000102041a000000000001004b0000000001000019000000010100c0390000001f04000029000031050000613d0000000103200039000000000303041a000000000003004b000031050000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000000041004b000051100000a13d0000001e01000029000021b90010009c000000000100601900000000001004350000004501000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000701043b000000400600043d000021fe0060009c0000001d05000029000001950000213d0000012001600039000000400010043f000000000107041a00000000081604360000000101700039000000000201041a0000000103200190000000010a2002700000007f0aa0618f0000001f00a0008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400900043d0000000004a90436000000000003004b000031510000613d001600000004001d00170000000a001d001800000009001d001900000008001d001e00000007001d001f00000006001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000170a00002900000000000a004b000031570000613d000000000201043b00000000010000190000001d050000290000001f060000290000001e0700002900000019080000290000001809000029000000160b00002900000000031b0019000000000402041a0000000000430435000000010220003900000020011000390000000000a1004b000031490000413d0000315d0000013d0000225001200197000000000014043500000000000a004b000000200100003900000000010060190000315d0000013d00000000010000190000001d050000290000001f060000290000001e07000029000000190800002900000018090000290000003f0110003900002253021001970000000001920019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000000009804350000000201700039000000000101041a000000400260003900000000001204350000000301700039000000000101041a000000600260003900000000001204350000000401700039000000000101041a000000800260003900000000001204350000000501700039000000000101041a000000a00260003900000000001204350000000601700039000000000101041a0000208401100197000000c0026000390000000000120435000000e0016000390000000702700039000000000202041a00000000002104350000000801700039000000000101041a000000ff0110018f000000020010008c000044830000213d000001000260003900000000001204350000001b0200002900000000010204330000002103000029000000000031004b00004e680000a13d0000000501300210000000000151001900000000006104350000000001020433000000000031004b00004e680000a13d0000000103300039002100000003001d0000001a0030006c000030ce0000413d000031a10000013d000000400100043d001b00000001001d000021b60010009c000001950000213d0000001b020000290000002001200039000000400010043f0000000000020435000000400200043d002100000002001d000000200100003900000000021204360000001b01000029820175970000040f0000002102000029000025db0000013d000004000100043d00000000002104350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000218e023000d1000000000101043b000000000003004b000031c30000613d00000020032000fa0000218e0030009c00004ed90000c13d0000000701100039000000000021041b000000400100043d0000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d02000039000000020300003900002243040000410000258e0000013d000000210100002900000000001004350000003701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000200010002a000000690000413d00000020011000290000001f0110006c000000690000413d00001c2b0000013d000004000100043d00000000002104350000003901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000218e023000d1000000000101043b000000000003004b000032030000613d00000020032000fa0000218e0030009c00004ed90000c13d0000000201100039000000000021041b000000400100043d0000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d020000390000000203000039000021c4040000410000258e0000013d000000210100002900000000001004350000003b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000200010002a000000690000413d00000020011000290000001f0110006c000000690000413d00001f090000013d000004000100043d000000000200041100000000002104350000002001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002000000001001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b001f00000001001d000000200110006c000000690000413d0000002102000039000000000202041a000000000021004b000041880000813d000000400100043d000022380200004100004b940000013d000004000100043d000000000200041100000000002104350000004001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d000000000001004b000032830000c13d0000004101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000218e02000041000000000101043b000000000101041a001f00000001001d000000000001004b0000329b0000613d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000001f0110006c000000690000413d0000222d020000410000222e0010009c0000329b0000813d0000208201100197000020870110012a00000003011000c9000000ff0110018f0000000e0110011a000021fa011000d1000021fb0210009a00000020032000b9001f00000003001d00000020013000fa000000000021004b000000690000c13d000004000100043d000000000200041100000000002104350000001101000039000000200010043f000004000100043d000020820010009c002000000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002002000029000000000021041b0000004001000039000000200010043f0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b002000000001001d000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001f02000029001f218e00200132000000000101043b0000002002000029000000000021041b0000000d01000039000000000101041a000000000001004b000048c70000613d00002251021001290000001f0020006c000048c70000813d0000222f010000410000000000100435000021de010000410000820300010430000000400100043d000021940200004100004b940000013d0000000102000039002100000000001d000004000100043d002000000002001d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000601043b000000400500043d000020950050009c000001950000213d0000022001500039000000400010043f000000000106041a00000000071504360000000101600039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400800043d0000000004980436000000000003004b000033350000613d001900000004001d001e00000009001d001a00000008001d001b00000007001d001c00000006001d001d00000005001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001e09000029000000000009004b0000333b0000613d000000000201043b00000000010000190000001d050000290000001c060000290000001b070000290000001a08000029000000190a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000091004b0000332d0000413d000033400000013d00002250012001970000000000140435000000000009004b00000020010000390000000001006019000033400000013d00000000010000190000001d050000290000001c060000290000001b070000290000001a080000290000003f0110003900002253021001970000000001820019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000000008704350000000201600039000000000101041a000000400250003900000000001204350000000301600039000000000101041a000000600250003900000000001204350000000401600039000000000101041a000000800250003900000000001204350000000501600039000000000101041a000000a00250003900000000001204350000000601600039000000000101041a000000c00250003900000000001204350000000701600039000000000101041a000000e002500039000000000012043500000100025000390000000801600039000000000101041a000000ff001001900000000003000019000000010300c03900000000003204350000000802100270000000ff0220018f000000020020008c000044830000213d00000120035000390000000000230435000021d7001001980000000001000019000000010100c039000001400250003900000000001204350000000901600039000000000101041a000001600250003900000000001204350000000a01600039000000000101041a000001800250003900002084031001970000000000320435000021da001001980000000001000019000000010100c039000001a00250003900000000001204350000000b01600039000000000101041a000001c00250003900000000001204350000000c01600039000000000101041a000001e002500039000000000012043500000200015000390000000d02600039000000000202041a0000000000210435000004e00100043d0000002102000029000000000021004b00004e680000a13d000000050120021000000500011000390000000000510435000004e00100043d000000000021004b00004e680000a13d0000002002000029000000010020003a000000690000413d0000001f0020006c0000000101200039002100000002001d0000000002010019000032e90000413d000000400500043d000025f80000013d0000000102000039002100000000001d000004000100043d002000000002001d00000000002104350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000601043b000000400500043d000021b80050009c000001950000213d0000016001500039000000400010043f000000000106041a00000000071504360000000101600039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400800043d0000000004980436000000000003004b000033f20000613d001900000004001d001a00000009001d001b00000008001d001c00000007001d001d00000006001d001e00000005001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001a09000029000000000009004b000033f80000613d000000000201043b00000000010000190000001e050000290000001d060000290000001c070000290000001b08000029000000190a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000091004b000033ea0000413d000033fd0000013d00002250012001970000000000140435000000000009004b00000020010000390000000001006019000033fd0000013d00000000010000190000001e050000290000001d060000290000001c070000290000001b080000290000003f0110003900002253021001970000000001820019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000000008704350000000201600039000000000101041a000000400250003900000000001204350000000301600039000000000101041a000000600250003900000000001204350000000401600039000000000101041a000000800250003900000000001204350000000501600039000000000101041a000000a00250003900000000001204350000000601600039000000000101041a000000c00250003900000000001204350000000701600039000000000101041a000000e00250003900000000001204350000000801600039000000000101041a000000ff001001900000000001000019000000010100c039000001000250003900000000001204350000000901600039000000000101041a0000012002500039000000000012043500000140015000390000000a02600039000000000202041a0000000000210435000004e00100043d0000002102000029000000000021004b00004e680000a13d000000050120021000000500011000390000000000510435000004e00100043d000000000021004b00004e680000a13d0000002002000029000000010020003a000000690000413d0000001f0020006c0000000101200039002100000002001d0000000002010019000033a60000413d000000400500043d000026110000013d000025970000013d000004000100043d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000801100039000000000201041a00002250022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000002030000390000221d040000410000258e0000013d000004000100043d00000000002104350000003901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000301100039000000000201041a00002250022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d02000039000000020300003900002249040000410000258e0000013d000000200010043f000004000100043d00000020020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000000001004b0000000001000019000000010100c039000000000001004b000034b10000c13d000000400100043d0000224c0200004100004b940000013d000004000100043d000000210200002900000000002104350000002701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b820177150000040f001e00000001001d0000008001100039001d00000001001d0000000001010433000004000200043d00000000001204350000002801000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001b00000001001d0000000101000039000000000201041a000000400300043d000021a0010000410000000001130436001c00000001001d001f00000003001d00000004013000390000000003000410000000000031043500000000010004140000208402200197000000040020008c00003b550000c13d0000000103000031000000200030008c0000002004000039000000000403401900003b820000013d000004000100043d000000210200002900000000002104350000004701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000201100039000000000201041a00002250022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d020000390000000203000039000021c7040000410000258e0000013d000004000100043d00000000002104350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000801100039000000000201041a00002250022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d02000039000000020300003900002220040000410000258e0000013d000004000100043d000000000200041100000000002104350000003b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000001f0110006c000000690000413d0000000902000039000000000202041a000000000021004b000041e00000813d000000400100043d000021ab0200004100004b940000013d000004000200043d0000000001000411001500000002001d00000000001204350000003001000039000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000035880000013d0000002101000029002100010010003d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b0000359c0000613d0000000101100270000035aa0000013d000000000102041a000000000001004b0000000001000019000000010100c039000035aa0000613d0000000103200039000000000303041a000000000003004b000035aa0000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006b000042e30000813d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001f00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000035d10000613d0000000101100270000035df0000013d000000000102041a000000000001004b0000000001000019000000010100c039000035df0000613d0000000103200039000000000303041a000000000003004b000035df0000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006c000051100000a13d0000001f02000029000021b90020009c0000000002006019000004000100043d001f00000002001d00000000002104350000003101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000601043b000000400500043d000021b80050009c000001950000213d0000016001500039000000400010043f000000000106041a00000000071504360000000101600039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400800043d0000000004980436000000000003004b000036300000613d001800000004001d001900000009001d001a00000008001d001b00000007001d001c00000006001d001d00000005001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001909000029000000000009004b000036360000613d000000000201043b00000000010000190000001d050000290000001c060000290000001b070000290000001a08000029000000180a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000091004b000036280000413d0000363b0000013d00002250012001970000000000140435000000000009004b000000200100003900000000010060190000363b0000013d00000000010000190000001d050000290000001c060000290000001b070000290000001a080000290000003f0110003900002253021001970000000001820019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000000008704350000000201600039000000000101041a000000400250003900000000001204350000000301600039000000000201041a000000600150003900000000002104350000000401600039000000000101041a000000800350003900000000001304350000000503600039000000000303041a000000a00450003900000000003404350000000603600039000000000303041a000000c00450003900000000003404350000000703600039000000000303041a000000e00450003900000000003404350000000803600039000000000303041a000000ff003001900000000003000019000000010300c039000001000450003900000000003404350000000903600039000000000303041a0000012004500039000000000034043500000140035000390000000a04600039000000000404041a00000000004304350000001e0020006c000035860000c13d000000170010006c000035860000c13d0000000001050433000000160010006c000035860000c13d000042e40000013d000004000100043d00000000002104350000003501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000501100039000000000201041a00002250022001970000002003000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d020000390000000203000039000021c2040000410000258e0000013d000004000100043d000000000200041100000000002104350000003701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000001f0110006c000000690000413d0000000902000039000000000202041a000000000021004b0000422b0000813d000000400100043d000021eb0200004100004b940000013d000000000100041100000000001004350000004301000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001a020000290000000d02200039001700000002001d000000000202041a000000000101043b000000000101041a001800000002001d000000000021004b000041810000813d0000001a020000290000000b01200039001600000001001d000000000101041a0000000c02200039001500000002001d000000000202041a000000000012004b000042760000813d000000000100041100000000001004350000002601000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d001d00000000001d002100000000001d000037090000013d0000002101000029002100010010003d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b0000371d0000613d00000001011002700000372b0000013d000000000102041a000000000001004b0000000001000019000000010100c0390000372b0000613d0000000103200039000000000303041a000000000003004b0000372b0000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006b00004ae40000813d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001f00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000037520000613d0000000101100270000037600000013d000000000102041a000000000001004b0000000001000019000000010100c039000037600000613d0000000103200039000000000303041a000000000003004b000037600000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006c000051100000a13d0000001f01000029000021b90010009c000000000100601900000000001004350000002701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000401100039000000000101041a0000001e0010006c000037070000c13d0000001d01000029001d00010010003e000037070000c13d000000690000013d0000001d010000290000208401100197002100000001001d00000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000200110006b000000690000413d0020001f001000bd0000001f0000006b000037a20000613d00000020030000290000001f023000fa000000000012004b000000690000c13d000000210100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020020000290000218e0220012a000000000101043b000000000101041a000000000021001a000000690000413d0000000d03000039000000000303041a0000218e0030009c000000690000213d000000000221001a0000000001000019000027760000613d0000218e0330009900000000012300a900000000022100d9000000000032004b000000690000c13d000027760000013d0000001d0000006b001f00000000001d000037c80000c13d000000400100043d0000223a0200004100004b940000013d000004000100043d0000001f0200002900000000002104350000004501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000000400100043d002100000001001d000021fe0010009c000001950000213d00000021020000290000012001200039000000400010043f0000002003000029000000000103041a0000000001120436001d00000001001d0000000101300039000000000201041a000000010320019000000001042002700000007f0440618f001e00000004001d0000001f0040008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400400043d001c00000004001d0000001e050000290000000004540436001b00000004001d000000000003004b0000427f0000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001e05000029000000000005004b00000000020000190000001b06000029000042850000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b0000380c0000413d000042850000013d000000400200043d0000218a03000041000000000032043500000004032000390000000000130435000020820020009c00002082020080410000004001200210000021a1011001c70000820300010430000000400100043d000022170200004100004b940000013d0000218c01000041000004e00010043f0000218d01000041000082030001043000002250012001970000001b0200002900000000001204350000001e0000006b000000200200003900000000020060190000003f0120003900002253021001970000001c01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000001c010000290000001d0200002900000000001204350000001f040000290000000201400039000000000101041a0000002103000029000000400230003900000000001204350000000301400039000000000101041a000000600230003900000000001204350000000401400039000000000201041a0000008001300039001e00000002001d00000000002104350000000501400039000000000501041a000000c00130003900000020020000290000000000210435000000a001300039002000000005001d0000000000510435000000e0013000390000000702400039000000000202041a00000000002104350000000801400039000000000101041a000000ff0110018f0000000003010019000000020010008c000044830000213d00000021020000290000010001200039001f00000003001d00000000003104350000000001020433000000400400043d002100000004001d0000002002400039000000a00300003900000000003204350000000000140435000000a0024000390000001c01000029820173d10000040f000000210400002900000080024000390000001f03000029000000000032043500000060024000390000002003000029000000000032043500000040024000390000001e03000029000006960000013d000000400100043d000021950200004100004b940000013d000004000400043d000000100040006c000000000104001900003a900000813d001300000001001d0000000502100210001100000002001d0000000f012000290000000201100367000000000101043b001200000001001d000020840010009c0000732e0000213d000004000100043d000000120200002900000000002104350000003001000039000000200010043f000004000100043d000020820010009c00002082010080410000004001100210002121cb001001cb0000000001000414000020820010009c0000208201008041000000c00110021000000021011001af00002085011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d0000002601000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000000021011001af00002085011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001f00000001001d0000004401000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001e00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b000038ce0000613d001c0001002002780000801002000039000021b504000041000038e00000013d000000000201041a000000000002004b0000000002000019000000010200c039001c00000002001d0000801002000039000021b504000041000038e00000613d0000000103100039000000000303041a000000000003004b000038e00000613d0000000201100039000000000101041a000000000001004b00000003010000390000000201006039001c00000001001d000000040040043f0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b000038f40000613d001b0001002002780000801002000039000021b504000041000039060000013d000000000201041a000000000002004b0000000002000019000000010200c039001b00000002001d0000801002000039000021b504000041000039060000613d0000000103100039000000000303041a000000000003004b000039060000613d0000000201100039000000000101041a000000000001004b00000003010000390000000201006039001b00000001001d000000040040043f0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b0000225102100167000000000202041a000000000002004b0000391a0000613d001a0001002002780000801002000039000021b5080000410000392c0000013d000000000201041a000000000002004b0000000002000019000000010200c039001a00000002001d0000801002000039000021b5080000410000392c0000613d0000000103100039000000000303041a000000000003004b0000392c0000613d0000000201100039000000000101041a000000000001004b00000003010000390000000201006039001a00000001001d0000001c01000029000020930010009c000001950000213d0000001c0100002900000005071002100000003f01700039000021b701100197000000400300043d0000000001130019001900000003001d000000000031004b00000000030000190000000103004039000020930010009c000001950000213d0000000100300190000001950000c13d000000400010043f00000019010000290000001c030000290000000001310436001600000001001d0000000001000031000000020110036700000005037002720000394e0000613d000000050330021000000016050000290000000003350019000000000401034f000000004604043c0000000005650436000000000035004b0000394a0000c13d0000001f00700190000039500000613d0000001b03000029000020930030009c000001950000213d0000001b0300002900000005073002100000003f03700039000021b703300197000000400400043d0000000003340019001800000004001d000000000043004b00000000040000190000000104004039000020930030009c000001950000213d0000000100400190000001950000c13d000000400030043f0000001b0300002900000018040000290000000003340436001500000003001d0000000503700272000039700000613d000000050330021000000015050000290000000003350019000000000401034f000000004604043c0000000005650436000000000035004b0000396c0000c13d0000001f00700190000039720000613d0000001a03000029000020930030009c000001950000213d0000001a0300002900000005063002100000003f03600039000021b703300197000000400400043d0000000003340019001700000004001d000000000043004b00000000040000190000000104004039000020930030009c000001950000213d0000000100400190000001950000c13d000000400030043f0000001a0300002900000017040000290000000003340436001400000003001d0000000503600272000039910000613d000000050330021000000014040000290000000003340019000000001501043c0000000004540436000000000034004b0000398d0000c13d0000001f00600190000039930000613d000004000500043d0000001c0050006c0000002003000029000039df0000813d002100000005001d000000040080043f00000000003004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001d00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000401043b0000225101400167000000000101041a000000000001004b000039bd0000613d00000001011002700000801002000039000021b5080000410000002105000029000039ce0000013d000000000104041a000000000001004b0000000001000019000000010100c0390000801002000039000021b5080000410000002105000029000039ce0000613d0000000103400039000000000303041a000000000003004b000039ce0000613d0000000201400039000000000101041a000000000001004b00000003010000390000000201006039000000000051004b000051100000a13d00000019010000290000000001010433000000000051004b000000200300002900004e680000a13d000000050150021000000016011000290000001d04000029000021b90040009c0000000004006019000000000041043500000001055000390000001c0050006c000039970000413d000004000500043d0000001b0050006c00003a290000813d002100000005001d000000040080043f0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a002000000001001d000021b501000041000000040010043f0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000401043b0000225101400167000000000101041a000000000001004b00003a080000613d00000001011002700000801002000039000021b508000041000000210500002900003a190000013d000000000104041a000000000001004b0000000001000019000000010100c0390000801002000039000021b508000041000000210500002900003a190000613d0000000103400039000000000303041a000000000003004b00003a190000613d0000000201400039000000000101041a000000000001004b00000003010000390000000201006039000000000051004b000051100000a13d00000018010000290000000001010433000000000051004b00004e680000a13d000000050150021000000015011000290000002003000029000021b90030009c0000000003006019000000000031043500000001055000390000001b0050006c000039e10000413d000004000500043d0000001a0050006c00003a720000813d002100000005001d000000040080043f0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a002000000001001d000021b501000041000000040010043f0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000401043b0000225101400167000000000101041a000000000001004b00003a520000613d00000001011002700000801002000039000021b508000041000000210500002900003a630000013d000000000104041a000000000001004b0000000001000019000000010100c0390000801002000039000021b508000041000000210500002900003a630000613d0000000103400039000000000303041a000000000003004b00003a630000613d0000000201400039000000000101041a000000000001004b00000003010000390000000201006039000000000051004b000051100000a13d00000017010000290000000001010433000000000051004b00004e680000a13d000000050150021000000014011000290000002003000029000021b90030009c0000000003006019000000000031043500000001055000390000001a0050006c00003a2b0000413d000000400100043d000021ca0010009c000001950000213d0000008002100039000000400020043f00000060021000390000001703000029000000000032043500000040021000390000001803000029000000000032043500000020021000390000001903000029000000000032043500000012020000290000000000210435000004e00200043d000000130020006c00004e680000a13d000000110200002900000500022000390000000000120435000004e00100043d000000130010006c00004e680000a13d00000013020000290000000102200039000000100020006c0000000001020019000038790000413d000000400200043d002100000002001d00000020010000390000000002120436000004e0010000398201763d0000040f0000002102000029000025db0000013d0000225001200197000000190200002900000000001204350000001f0000006b000000200200003900000000020060190000003f0120003900002253021001970000001a01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000001b010000290000001a0200002900000000002104350000002101000029000000400310003900000020020000290000000201200039000000000101041a000000ff001001900000000001000019000000010100c039001f00000003001d00000000001304350000000301200039000000000201041a000000010320019000000001042002700000007f0440618f002000000004001d0000001f0040008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400400043d001b00000004001d00000020050000290000000004540436001a00000004001d000000000003004b000047120000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000002005000029000000000005004b00000000020000190000001a06000029000047180000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00003ada0000413d000047180000013d000004000100043d000000000200041100000000002104350000001701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b000000210000006b000043c00000c13d0000218901000041000000000010043900000000010004120000000400100443000000400100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000201043b000004000100043d002100000002001d00000000002104350000003901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001f00000001001d000000400100043d002000000001001d0000209b0010009c000001950000213d0000002001000029000000c001100039001e00000001001d000000400010043f0000001f01000029000000000101041a000000010210019000000001031002700000007f0330618f001d00000003001d0000001f0030008c00000000030000190000000103002039000000000331013f0000000100300190000003d20000c13d0000001e030000290000001d040000290000000000430435000000000002004b000051160000613d0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001d06000029000000000006004b00000000020000190000511d0000613d0000002002000029000000e003200039000000000101043b00000000020000190000000004230019000000000501041a000000000054043500000001011000390000002002200039000000000062004b00003b4d0000413d0000511d0000013d0000001f03000029000020820030009c00002082030080410000004003300210000020820010009c0000208201008041000000c001100210000000000131019f000021a1011001c7820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f00000005064002720000001c0a00002900003b6f0000613d000000000701034f0000001f08000029000000007907043c00000000089804360000000000a8004b00003b6b0000c13d000000000005004b00003b7e0000613d0000000506600210000000000761034f0000001f066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000041a30000613d0000001f01400039000000600210018f0000001f01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000004000200043d000000400010043f000000200030008c000042790000813d000020820020009c000020820200804100002197012000d10000820300010430000000200000006b000000000100001900003b990000613d0000000e01000029000000000101043300000020040000290000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f0000445c0000013d000004000400043d002e00000004001d002f04e00000003d000000000024004b00003efc0000813d000000050140021000000031011000290000000201100367000000000101043b001d00000001001d000020840010009c0000732e0000213d0000000401000039000000000101041a000000ff0010019000003bf60000613d0000000601000039000000000101041a001e00000001001d000000000001004b00003bf60000613d0000000301000039000000000601041a0000000801000039000000000101041a002000000001001d0000000501000039000000000101041a001f00000006001d00003bc40000013d00000000030000190000001e023000fa000000200020002a002000200020002d000000690000413d002100000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000401043b0000002107000029000000000047004b00008010020000390000001f0600002900003c080000813d000000000367004b000000690000413d000021f10230012a0000000105200039000021f1015000d100000000055100d9000021f10050009c000000690000c13d000000000061001a000000690000413d0000000001610019000000000041004b0000000001048019000021f00030009c000000690000213d000000000471004b000000690000413d000021fd0030009c000000000300001900003bc00000213d000021880320027f00000000023400a900000000033200d9000000000043004b000000690000c13d000000000002004b00003bbf0000613d0000218e032000d100000000022300d90000218e0020009c00003bc00000613d000000690000013d0000001d0100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d000080100200003900003c970000013d0000001d010000290000208401100197001d00000001001d00000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002100000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000200110006b0000801002000039000000690000413d00000021041000b9000000210000006b00003c2f0000613d00000021034000fa000000000013004b000000690000c13d002100000004001d0000001d0100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002000000001001d0000004b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001f00000001001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b0000001f0010006b000080100200003900003c6f0000a13d0000004901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c7820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000002003000029000000000031001a00008010020000390000002104000029000000690000413d000000000331001900003c710000013d00000021040000290000002003000029000000000003004b00003c7b0000613d000021fa013000d1000021fc0010009c000000690000213d00000000033100d9000021fa0030009c000000690000c13d000021fb0110009a00003c7c0000013d0000218e010000410000218e0340012a00210000003100ad0000218e0040009c00003c830000413d00000021033000f9000000000013004b000000690000c13d0000001d0100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c7820181fc0000040f00000001002001900000732e0000613d00000021020000290000218e0320012a000000000101043b000000000101041a000000000031001a0000801002000039000000690000413d001f00000031001d000004000100043d0000001d0300002900000000003104350000003a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000003000414000020820030009c0000208203008041000000c003300210000000000131019f00002092011001c7820181fc0000040f00000001002001900000732e0000613d000000400200043d002100000002001d0000209b0020009c000001950000213d000000000101043b0000002104000029000000c002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a00000000003204350000000202100039000000000202041a000000400340003900000000002304350000000302100039000000000202041a000000600340003900000000002304350000000402100039000000000202041a00000080034000390000000000230435000000a0024000390000000501100039000000000101041a0000000000120435000004000100043d0000001d0200002900000000002104350000003601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000400400043d0000209e0040009c000001950000213d000000000101043b0000014002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a00000000003204350000000202100039000000000202041a000000400340003900000000002304350000000302100039000000000202041a000000600340003900000000002304350000000402100039000000000202041a000000800340003900000000002304350000000502100039000000000202041a000000a00340003900000000002304350000000602100039000000000202041a000000c00340003900000000002304350000000702100039000000000202041a000000ff002001900000000002000019000000010200c039000000e00340003900000000002304350000000802100039000000000202041a00000100034000390000000000230435002000000004001d00000120024000390000000901100039000000000101041a0000000000120435000004000100043d0000001d0200002900000000002104350000000f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000003400010043f0000001001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000003800010043f0000001201000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001e00000001001d0000004101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001c00000001001d0000004001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001b00000001001d0000004a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001a00000001001d0000004901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001900000001001d0000004b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001800000001001d0000001501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001700000001001d0000001f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001600000001001d0000002001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001500000001001d0000001701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001400000001001d0000001801000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021020000290000000002020433002100000002001d000000000101043b000000000101041a001300000001001d00000020010000290000000001010433000002c00010043f0000003b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000003000010043f0000003701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000003e00010043f0000001b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0110018f000003c00010043f0000001a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0110018f000003a00010043f0000003c01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000208401100197000003600010043f0000003e01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000003200010043f000000400200043d000002e00020043f000021f90020009c000001950000213d0000001401000029000000ff001001900000001301000029000000ff0110018f000002e003200039000000400030043f0000001d030000290000000000320435000002e00200043d0000002002200039000003400300043d0000000000320435000002e00200043d0000004002200039000003800300043d0000000000320435000002e00200043d00000060022000390000001f030000290000000000320435000002e00200043d00000080022000390000001e030000290000000000320435000002e00200043d000000a0022000390000001c030000290000000000320435000002e00200043d000000c0022000390000001b030000290000000000320435000002e00200043d000000e0022000390000001a030000290000000000320435000002e00200043d000001000220003900000019030000290000000000320435000002e00200043d000001200220003900000018030000290000000000320435000002e00200043d000001400220003900000017030000290000000000320435000002e00200043d000001600220003900000016030000290000000000320435000002e00200043d0000018002200039000000150300002900000000003204350000000002000019000000010200c039000002e00300043d000001a0033000390000000000230435000000000001004b0000000001000019000000010100c039000002e00200043d000001c0022000390000000000120435000002e00100043d000001e00110003900000021020000290000000000210435000002e00100043d0000020001100039000002c00200043d0000000000210435000002e00100043d0000022001100039000003000200043d0000000000210435000002e00100043d0000024001100039000003e00200043d0000000000210435000003c00100043d000000000001004b0000000001000019000000010100c039000002e00200043d00000260022000390000000000120435000003a00100043d000000000001004b0000000001000019000000010100c039000002e00200043d00000280022000390000000000120435000002e00100043d000002a001100039000003600200043d0000000000210435000002e00100043d000002c001100039000003200200043d00000000002104350000002f0100002900000000030104330000002e02000029000000000023004b00004e680000a13d000000050320021000000000033100190000002003300039000002e00400043d00000000004304350000000003010433000000000023004b00004e680000a13d002e00010020003d0000000104200039000000300040006c00003ba60000413d00003efd0000013d000004e001000039000000400300043d002100000003001d00000020020000390000000002230436820175240000040f0000002102000029000025db0000013d0000218a01000041000004e00010043f000004e40040043f0000218b0100004100008203000104300000000002000019001b00000002001d0000000501200210001d00200010002d00000002020003670000001d01200360000000000301043b00000000040000310000001e0140006a000001030110008a0000223d051001970000223d06300197000000000756013f000000000056004b00000000050000190000223d05004041000000000013004b00000000010000190000223d010080410000223d0070009c000000000501c019000000000005004b0000732e0000c13d0000002e01000039000000000f01041a0000002005300029000000000352034f000000000303043b00000000065400490000001f0660008a0000223d076001970000223d08300197000000000978013f000000000078004b00000000070000190000223d07004041000000000063004b00000000060000190000223d060080410000223d0090009c000000000706c019000000000007004b0000732e0000c13d0000000006530019000000000362034f000000000303043b000020930030009c0000732e0000213d0000000007340049000000200b6000390000223d067001970000223d08b00197000000000968013f000000000068004b00000000060000190000223d0600404100000000007b004b00000000070000190000223d070020410000223d0090009c000000000607c019000000000006004b0000732e0000c13d0000002006500039000000000862034f0000004006500039000000000662034f0000006007500039000000000772034f0000008009500039000000000a92034f000000000707043b000000000606043b000000000508043b00000000080a043b000000000008004b000000000a000019000000010a00c0390000000000a8004b0000732e0000c13d000000200a900039000000000ca2034f0000004009900039000000000992034f000000000a09043b00000000090c043b000000400100043d002100000001001d000021b80010009c000001950000213d0000002101000029000001600c1000390000004000c0043f0000000001f10436001f00000001001d0000001f0c300039000022530cc001970000003f0cc00039000022530dc00197000000400c00043d000000000ddc00190000000000cd004b000000000e000019000000010e0040390000209300d0009c000001950000213d0000000100e00190000001950000c13d0000004000d0043f000000000d3c0436000000000eb3001900000000004e004b0000732e0000213d001c0000000f001d0000000002b2034f0000000504300272000000050440021000003f860000613d000000000b4d0019000000000e02034f000000000f0d001900000000e10e043c000000000f1f04360000000000bf004b00003f820000c13d0000001f0b30019000003f940000613d000000000142034f00000000024d00190000000304b00210000000000b020433000000000b4b01cf000000000b4b022f000000000101043b0000010004400089000000000141022f00000000014101cf0000000001b1019f000000000012043500000000013d001900000000000104350000001f010000290000000000c1043500000021030000290000004002300039000004000100043d001600000002001d00000000001204350000006002300039000004000100043d001500000002001d00000000001204350000014002300039000004000100043d001a00000002001d0000000000a204350000012002300039001900000002001d00000000009204350000010002300039001800000002001d0000000000820435000000e002300039001700000002001d0000000000720435000000c002300039001400000002001d0000000000620435000000a002300039001300000002001d00000000005204350000008002300039001200000002001d00000000001204350000001c01000029000000010110003a000000690000613d0000002e02000039000000000012041b000004000200043d00000000001204350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021020000290000000002020433000000000401043b000000000024041b0000001f0100002900000000030104330000000076030434000020930060009c000023580000213d0000000105400039000000000105041a000000010010019000000001081002700000007f0880618f0000001f0080008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d000000200080008c002100000004001d001f00000005001d001c00000006001d001100000003001d0000400e0000413d000d00000008001d000e00000007001d000004000100043d0000000000510435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001c060000290000001f026000390000000502200270000000200060008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000021040000290000001f050000290000000e070000290000400e0000813d000000000002041b0000000102200039000000000012004b0000400a0000413d0000001f0060008c000040390000a13d000004000100043d0000000000510435000004000100043d000020820010009c000e00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001c060000290000225302600197000000000101043b0000000e04000029000000000024004b000040440000813d00002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000331001900000001043000390000002003000039000000110700002900000000057300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000040310000c13d000040460000013d000000000006004b0000040001000039000000000107c0190000000302600210000022510220027f00002251022001670000000001010433000000000121016f0000000102600210000000000121019f000040540000013d00000020030000390000001107000029000000000062004b000040500000813d0000000302600210000000f80220018f000022510220027f000022510220016700000000037300190000000003030433000000000223016f000000000021041b000000010160021000000001011001bf00000021040000290000001f05000029000000000015041b000000160100002900000000010104330000000202400039000000000012041b000000150100002900000000010104330000000302400039000000000012041b000000120100002900000000010104330000000402400039000000000012041b000000130100002900000000010104330000000502400039000000000012041b000000140100002900000000010104330000000602400039000000000012041b000000170100002900000000010104330000000702400039000000000012041b0000000801400039000000000201041a000022500220019700000018030000290000000003030433000000000003004b000000010220c1bf000000000021041b000000190100002900000000010104330000000902400039000000000012041b0000000a014000390000001a020000290000000002020433000000000021041b00000002020003670000001d01200360000000000101043b00000000030000310000001e0430006a000001030440008a0000223d054001970000223d06100197000000000756013f000000000056004b00000000050000190000223d05004041000000000041004b00000000040000190000223d040080410000223d0070009c000000000504c019000000000005004b0000732e0000c13d0000002e04000039000000000504041a0000002004100029000000000142034f000000000101043b00000000064300490000001f0660008a0000223d076001970000223d08100197000000000978013f000000000078004b00000000070000190000223d07004041000000000061004b00000000060000190000223d060080410000223d0090009c000000000706c019000000000007004b0000732e0000c13d0000000006410019000000000162034f000000000101043b000020930010009c0000732e0000213d000000000313004900000020066000390000223d073001970000223d08600197000000000978013f000000000078004b00000000070000190000223d07004041000000000036004b00000000030000190000223d030020410000223d0090009c000000000703c019000000000007004b0000732e0000c13d0000008004400039000000000342034f000000000303043b000000000003004b0000000007000019000000010700c039000000000073004b0000732e0000c13d000000600740008a000000000972034f000000400740008a000000000b72034f000000200740008a000000000772034f0000002008400039000000000882034f0000004004400039000000000442034f000000000c62034f000000000a04043b000000000808043b000000000707043b00000000020b043b001f00000002001d000000000209043b002100000002001d000000400200043d00000100042000390000000000140435000001000400003900000000094204360000012004200039000000050b100272000000050db00210000040e20000613d000000000ed40019000000000f0c034f000000000b04001900000000f60f043c000000000b6b04360000000000eb004b000040de0000c13d0000001f0b100190000040f00000613d0000000006dc034f000000000cd40019000000030bb00210000000000d0c0433000000000dbd01cf000000000dbd022f000000000606043b000001000bb000890000000006b6022f0000000006b601cf0000000006d6019f00000000006c043500000000041400190000000000040435000000c0042000390000000000a40435000000a0042000390000000000840435000000800420003900000000003404350000006003200039000000000073043500000040032000390000001f04000029000000000043043500000021030000290000000000390435000000e00320003900000000005304350000001f0110003900002253011001970000223e0010009c0000223e010080410000006001100210000020820020009c00002082020080410000004002200210000000000121019f0000000002000414000020820020009c0000208202008041000000c002200210000000000121019f0000223f0110009a0000800d020000390000000203000039000021b204000041820181f70000040f00000001002001900000732e0000613d0000001b0200002900000001022000390000000f0020006c00003f0a0000413d000004000200043d0000000b0020006c00001f470000413d000020820020009c000020820200804100002197012000d1000082020001042e0000001c010000290000000101100039001800000001001d000000000101041a000000010010019000000001021002700000007f0220618f001700000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001701000029000000200010008c000041540000413d000004000100043d00000018020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001b030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000017010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000041540000813d000000000002041b0000000102200039000000000012004b000041500000413d0000001b010000290000001f0010008c000047a50000a13d000004000100043d00000018020000290000000000210435000004000100043d000020820010009c001a00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001b0220017f000000000101043b0000001a0020006b000049af0000813d0000001a0400002900002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000431001900000020030000390000000104400039000000190600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000041790000c13d000049b00000013d000000400100043d000021d80200004100004b940000013d000021f8010000410000000000100435000021de010000410000820300010430000004000100043d000000210200002900000000002104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000301100039000000000101041a000000ff00100190000047a90000c13d000000400100043d000022370200004100004b940000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000041b40000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000041b00000c13d000000000004004b000029250000613d0000000505500210000000000252034f00000000055100190000000304400210000000000605043300000000064601cf000000000646022f000000000202043b0000010004400089000000000242022f00000000024201cf000000000262019f0000000000250435000029250000013d0000000101000039000000000201041a000021a00100004100000021030000290000000001130436002000000001001d00000004013000390000000003000411000000000031043500000000010004140000208402200197001d00000002001d000000040020008c000045320000c13d0000000103000031000000200030008c00000020040000390000000004034019000045600000013d0000001a010000290000012001100039001700000001001d0000000001010433000000000001004b000046860000c13d000000400100043d000021bf0200004100004b940000013d0000002101000029000000010110003a00004ed90000613d000004000200043d00000000001204350000003901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001f00000001001d000000400100043d002100000001001d0000209b0010009c000001950000213d0000002101000029000000c001100039001e00000001001d000000400010043f0000001f01000029000000000101041a000000010210019000000001031002700000007f0330618f001d00000003001d0000001f0030008c00000000030000190000000103002039000000000331013f0000000100300190000003d20000c13d0000001e030000290000001d040000290000000000430435000000000002004b00004f7f0000613d0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001d06000029000000000006004b000000000200001900004f860000613d0000002102000029000000e003200039000000000101043b00000000020000190000000004230019000000000501041a000000000054043500000001011000390000002002200039000000000062004b000042230000413d00004f860000013d0000002101000029000000010110003a00004ed90000613d000004000200043d00000000001204350000003501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001f00000001001d000000400100043d002100000001001d0000209c0010009c000001950000213d00000021010000290000010001100039001e00000001001d000000400010043f0000001f01000029000000000101041a000000010210019000000001031002700000007f0330618f001d00000003001d0000001f0030008c00000000030000190000000103002039000000000331013f0000000100300190000003d20000c13d0000001e030000290000001d040000290000000000430435000000000002004b00004fc40000613d0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001d06000029000000000006004b000000000200001900004fcb0000613d00000021020000290000012003200039000000000101043b00000000020000190000000004230019000000000501041a000000000054043500000001011000390000002002200039000000000062004b0000426e0000413d00004fcb0000013d000000400100043d000021d90200004100004b940000013d0000001f0300002900000000030304330000001b0030006b000047310000a13d000022140200004100004b940000013d00002250012001970000001b0200002900000000001204350000001e0000006b000000200200003900000000020060190000003f0120003900002253021001970000001c01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000001d010000290000001c02000029000000000021043500000020040000290000000201400039000000000101041a00000021030000290000004002300039001e00000002001d00000000001204350000000301400039000000000101041a0000006002300039001c00000002001d00000000001204350000000401400039000000000101041a0000008002300039001900000002001d00000000001204350000000501400039000000000101041a000000a002300039001d00000002001d00000000001204350000000601400039000000000101041a0000208401100197000000c002300039001b00000002001d0000000000120435000000e0023000390000000701400039000000000101041a001a00000002001d00000000001204350000000801400039000000000101041a000000ff0110018f000000020010008c000044830000213d00000021020000290000010002200039002100000002001d0000000000120435000004000100043d000000000200041100000000002104350000003601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001d020000290000000002020433000000000101043b0000001e030000290000000003030433000000000003004b00004a990000c13d0000001c030000290000000003030433000000000003004b00004a990000c13d000000000002004b002000000000001d00004a9a0000613d002000010020021800000020022000f9000000020020008c00004ed90000c13d00004a9a0000013d001f00150000002d0000001f0000006b000044020000c13d000000400100043d000022150200004100004b940000013d0000001d0000006b000042f00000613d0000001d050000290000218e045000d100000000045400d90000218e0040009c00004ed90000c13d000000400400043d001a00000004001d0000209b0040009c000001950000213d00000021040000290000001f044000390000225304400197001900000004001d0000003f0440003900002253054001970000001a04000029000000c004400039000000400040043f0000000005540019000020930050009c000001950000213d000000400050043f000000210500002900000000005404350000001f05000029000000000050007c0000732e0000213d00000020050000290000002005500039000000000653034f00000021070000290020001f007001930000001a05000029000000e005500039001f00050070027a000043180000613d0000001f0700002900000005077002100000000007750019000000000806034f0000000009050019000000008a08043c0000000009a90436000000000079004b000043140000c13d000000200000006b000043290000613d0000001f070000290000000507700210000000000676034f000000000775001900000020080000290000000308800210000000000907043300000000098901cf000000000989022f000000000606043b0000010008800089000000000686022f00000000068601cf000000000696019f0000000000670435000000210550002900000000000504350000001a0600002900000000054604360000002403300370000000000303043b000000a004600039001800000004001d00000000001404350000008001600039001700000001001d000000000021043500000060026000390000001c01000029001600000002001d0000000000120435001500000005001d00000000003504350000001d010000290000218e011000d10000004002600039001d00000001001d001400000002001d00000000001204350000001b01000029000000010110003a000000690000613d0000003802000039000000000012041b000004000200043d00000000001204350000003901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001b00000001001d0000001a010000290000000001010433001200000001001d0000000021010434001300000002001d001a00000001001d000020930010009c000023580000213d0000001b01000029000000000101041a000000010010019000000001021002700000007f0220618f001100000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001101000029000000200010008c000043930000413d000004000100043d0000001b020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001a030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000011010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000043930000813d000000000002041b0000000102200039000000000012004b0000438f0000413d0000001a010000290000001f0010008c000057d30000a13d000004000100043d0000001b020000290000000000210435000004000100043d000020820010009c001300000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001a0220017f000000000101043b000000130020006b00005a210000813d000000130400002900002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000431001900000020030000390000000104400039000000120600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000043b80000c13d00005a220000013d0000003c01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a00002083022001970000002103000029000000000232019f000000000021041b000004000100043d00000000003104350000003d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a002100000002001d000020930020009c000001950000213d00000021020000290000000102200039000000000021041b00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000201041a00002083022001970000000003000411000000000232019f000000000021041b00003afc0000013d000004000100043d0000001f0200002900000000002104350000003101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b820177cd0000040f000004000200043d000000160300002900000000003204350000003202000039000000200020043f000004000200043d000020820020009c00002082020080410000004002200210002000000001001d0000000001000414000020820010009c0000208201008041000000c001100210000000000112019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001c00000001001d0000000101000039000000000201041a000000400300043d000021a0010000410000000001130436001d00000001001d002100000003001d00000004013000390000000003000410000000000031043500000000010004140000208402200197000000040020008c00004b9a0000c13d0000000103000031000000200030008c0000002004000039000000000403401900004bc70000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000000f0600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000044470000c13d000000200020006c000044590000813d00000020020000290000000302200210000000f80220018f000022510220027f00002251022001670000000f033000290000000003030433000000000223016f000000000021041b0000002001000029000000010110021000000001011001bf0000000d02000029000000000012041b0000001801000029000000000101043300000021030000290000000202300039000000000012041b000000190100002900000000010104330000000302300039000000000012041b0000001b0100002900000000010104330000000402300039000000000012041b0000001d0100002900000000010104330000000502300039000000000012041b0000001a0100002900000000010104330000000602300039000000000012041b0000001e0100002900000000010104330000000702300039000000000012041b0000000801300039000000000201041a00002250022001970000001c030000290000000003030433000000000003004b000000010220c1bf000000000021041b0000001f030000290000000003030433000000020030008c000044890000a13d0000220c0100004100000000001004350000002101000039000000040010043f000021a1010000410000820300010430000020970220019700000008033002100000ff000330018f000000000223019f00000010030000290000000003030433000000000003004b00002098030000410000000003006019000000000232019f000000000021041b0000001301000029000000000101043300000021040000290000000902400039000000000012041b0000001101000029000000000101043300002084011001970000000a02400039000000000302041a0000209903300197000000000113019f00000012030000290000000003030433000000000003004b0000209a030000410000000003006019000000000131019f000000000012041b000000170100002900000000010104330000000b02400039000000000012041b000000140100002900000000010104330000000c02400039000000000012041b0000000d0140003900000015020000290000000002020433000000000021041b000000400100043d002100000001001d0000209b0010009c000001950000213d0000002102000029000000c001200039000000400010043f0000209c0020009c000001950000213d00000021040000290000010002400039000000400020043f0000000e020000390000000000210435000000e0024000390000209d03000041000000000032043500000080034000390000000502000039002000000003001d00000000002304350000004003400039000000010200008a001e00000003001d0000000000230435000000a0034000390000000a02000039001f00000003001d00000000002304350000002003400039001c00000003001d000000000023043500000000001404350000006001400039001d00000001001d00000000000104350000003801000039000000000101041a000000010110003a000000690000613d0000003802000039000000000012041b00000000001004350000003901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001b00000001001d00000021010000290000000001010433001a00000001001d0000000021010434001900000002001d002100000001001d000020930010009c000001950000213d0000001b01000029000000000101041a000000010010019000000001021002700000007f0220618f001800000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001801000029000000200010008c0000451e0000413d0000001b0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000018010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000451e0000813d000000000002041b0000000102200039000000000012004b0000451a0000413d00000021010000290000001f0010008c000052220000a13d0000001b0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000002102200180000000000101043b000056d40000c13d0000002003000039000056e10000013d0000002102000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000021a1011001c70000001d02000029820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000000200a0000290000454d0000613d000000000701034f0000002108000029000000007907043c00000000089804360000000000a8004b000045490000c13d000000000005004b0000455c0000613d0000000506600210000000000761034f00000021066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000048a50000613d0000001f01400039000000600110018f0000002102100029000000000012004b00000000010000190000000101004039000020930020009c000001950000213d0000000100100190000001950000c13d000004000100043d000000400020043f000000200030008c00004bd50000413d00000021020000290000000002020433002100000002001d000001400200043d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000701100039000000000101041a000000210010006b00004ed30000813d000000400100043d000021aa0200004100004b940000013d000000000100041182017c120000040f000000000100041182017b360000040f000004000100043d000000000200041100000000002104350000004b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000001e0010006c000045d10000a13d0000004901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000000100041182017a100000040f000004000100043d000000000200041100000000002104350000004a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a0000000001000411820178e90000040f00000021010000290000000001010433001f00000001001d000004000100043d000000000200041100000000002104350000004901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001f02000029000000000021041b00000020010000290000000001010433001f00000001001d0000004a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001f02000029000000000021041b0000001e01000029000022190010009c00004ed90000213d000004000100043d000000000200041100000000002104350000004b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001e02000029000022180220009a000000000101043b000000000021041b00000021010000290000000002010433000000000100041182017ee00000040f000000200100002900000000020104330000000001000411820180080000040f000004000100043d000000000200041100000000002104350000001501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e02000029000000000021041b0000000f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002100000001001d0000001001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002000000001001d0000001101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000400200043d0000004003200039000000000013043500000020012000390000002003000029000000000031043500000021010000290000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021df011001c70000800d0200003900000002030000390000221a0400004100000000050004110000258f0000013d00000019020000290000000101200039000000000101041a0000000202200039001600000002001d000000000202041a000000000012004b000047a20000813d000000000100041100000000001004350000003001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d001d00000000001d002100000000001d000046a20000013d0000002101000029002100010010003d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000046b60000613d0000000101100270000046c40000013d000000000102041a000000000001004b0000000001000019000000010100c039000046c40000613d0000000103200039000000000303041a000000000003004b000046c40000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006b000051e50000813d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001f00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000046eb0000613d0000000101100270000046f90000013d000000000102041a000000000001004b0000000001000019000000010100c039000046f90000613d0000000103200039000000000303041a000000000003004b000046f90000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006c000051100000a13d0000001f01000029000021b90010009c000000000100601900000000001004350000003101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000001e0010006c000046a00000c13d0000001d01000029001d00010010003e000000690000613d000046a00000013d00002250012001970000001a020000290000000000120435000000200000006b000000200200003900000000020060190000003f0120003900002253021001970000001b01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000210200002900000060012000390000001b03000029000000000031043500000000010204330000208400100198000003110000613d0000001f010000290000000001010433000000000001004b00004a0a0000c13d000000400100043d000022050200004100004b940000013d000000000100041100000000001204350000003a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000201100039000000000201041a000000000002004b000000690000613d000000010220008a000000000021041b000004000100043d000000000200041100000000002104350000002601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000021b502000041000000040020043f000004000200043d0000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000004000200043d000000000301043b001f00000003001d0000225101300167001a00000001001d000000000101041a001c00000001001d000000000001004b000052040000c13d0000001f060000290000000201600039000000000301041a0000000104600039000000000504041a000000000606041a000000200060006c000052440000c13d0000001f06000029000000000056041b000052460000013d000004000100043d0000001f0300002900000000003104350000003501000039000000200010043f0000006401200370000000000101043b001e00000001001d000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000301100039000000000101041a0000001e0010006c000048fd0000a13d000000400100043d000022230200004100004b940000013d000000400100043d000021ba0200004100004b940000013d0000001b0000006b000048b90000c13d001a04000000003d000048b90000013d000004000100043d000000210200002900000000002104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000002202000039000000000202041a000000000101043b0000000401100039000000000101041a000000000021004b00004ae10000813d000004000100043d000000000200041100000000002104350000001f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002000000001001d000000000001004b0000000001000019000000010100c039001e00000001001d000048240000613d0000000f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a001d00000001001d000004000100043d000000200200002900000000002104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000201100039000000000201041a0000001d0220006c000000690000413d000000000021041b000004000100043d000000200200002900000000002104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000401100039000000000201041a000000000002004b00004ed90000613d000000010220008a000000000021041b000004000100043d000000000200041100000000002104350000001f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002102000029000000000021041b0000002001000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001f02000029000000000021041b0000000f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a002000000001001d000004000100043d000000210200002900000000002104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000201100039000000000201041a000000200020002a000000690000413d0000002002200029000000000021041b000004000100043d000000210200002900000000002104350000001d01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000401100039000000000201041a000000010220003a00004ed90000613d000000000021041b000000400100043d0000001e020000290000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000003030000390000223604000041000000000500041100000021060000290000258f0000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f00000005053002720000000505500210000048b60000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000048b20000c13d000000000004004b000029250000613d000041b70000013d0000001b030000290000000301300210000022510110027f00002251011001670000001a020000290000000002020433000000000112016f0000000102300210000000000121019f000049be0000013d000000190000006b00004bd90000c13d001804000000003d00004bd90000013d0000001f011000b90000218e0110012a001e00000001001d0020001f00100073000000690000413d0000000101000039000000000101041a000021a50200004100000000002004390000208401100197001d00000001001d00000004001004430000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800202000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000000001004b00004bd40000613d000000400200043d000022300100004100000000001204350000002401200039000004000300043d001c00000003001d00000020030000290000000000310435002000000002001d000000040120003900000021020000290000000000210435000004000300043d00000000010004140000001d02000029000000040020008c0000552a0000613d0000002002000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000000003004b000055010000c13d00002213011001c70000001d02000029000055050000013d000000210000006b000049040000613d00000021020000290000218e012000d100000000012100d90000218e0010009c00004ed90000c13d000000400100043d001e00000001001d0000209c0010009c000001950000213d0000001e050000290000010001500039000000400010043f000004e001000039000000000315043600000002010003670000002402100370000000000202043b001a00000003001d00000000002304350000004402100370000000000202043b0000004003500039001900000003001d00000000002304350000006402100370000000000202043b000000a0045000390000002003000029001d00000004001d00000000003404350000006003500039001800000003001d000000000023043500000021020000290000218e022000d10000008003500039002100000002001d001700000003001d0000000000230435000000c402100370000000000202043b000000c003500039001b00000003001d0000000000230435000000e002500039000000e401100370000000000101043b001c00000002001d00000000001204350000001f01000029000000010110003a000000690000613d0000003402000039000000000012041b000004000200043d00000000001204350000003501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001f00000001001d0000001e010000290000000001010433001500000001001d0000000021010434001600000002001d001e00000001001d000020930010009c000023580000213d0000001f01000029000000000101041a000000010010019000000001021002700000007f0220618f001400000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001401000029000000200010008c000049820000413d000004000100043d0000001f020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001e030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000014010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000049820000813d000000000002041b0000000102200039000000000012004b0000497e0000413d0000001e010000290000001f0010008c000058a40000a13d000004000100043d0000001f020000290000000000210435000004000100043d000020820010009c001600000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001e0220017f000000000101043b000000160020006b00005be40000813d000000160400002900002251034001670000002004400039000000000042004b000000000402201900000000034300190000000503300270000000000431001900000020030000390000000104400039000000150600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000049a70000c13d00005be50000013d00000020030000390000001b0020006c000049bb0000813d0000001b020000290000000302200210000000f80220018f000022510220027f000022510220016700000019033000290000000003030433000000000223016f000000000021041b0000001b01000029000000010110021000000001011001bf0000001802000029000000000012041b0000001c040000290000000201400039000005200200043d000000000021041b0000000301400039000000000201041a0000225002200197000005400300043d000000000003004b000000010220c1bf000000000021041b0000000401400039000005600200043d000000000021041b0000001e01000039000000000501041a000000400100043d0000002002100039000000210300002900000000003204350000002002000039000000000021043500000040021000390000001d0300002900000002033003670000001f0000006b000049e40000613d0000001f0400002900000005044002100000000004420019000000000603034f0000000007020019000000006806043c0000000007870436000000000047004b000049e00000c13d000000200000006b000049f50000613d0000001f040000290000000504400210000000000343034f000000000442001900000020060000290000000306600210000000000704043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f000000000034043500000021022000290000000000020435000020820010009c000020820100804100000040011002100000001e020000290000004002200039000020820020009c00002082020080410000006002200210000000000121019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d020000390000000203000039000021f7040000410000258f0000013d000004000100043d000000000200041100000000002104350000004401000039000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b00004a340000613d000000010110027000004a420000013d000000000102041a000000000001004b0000000001000019000000010100c03900004a420000613d0000000103200039000000000303041a000000000003004b00004a420000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006b000053320000813d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001f00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b00004a690000613d000000010110027000004a770000013d000000000102041a000000000001004b0000000001000019000000010100c03900004a770000613d0000000103200039000000000303041a000000000003004b00004a770000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006c000051100000a13d0000001f02000029000021b90020009c0000000002006019000004000100043d00000000002104350000004501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000601100039000000000101041a0000001e0110014f0000002102000029002100010020003d000020840010019800004a200000c13d000000400100043d000022040200004100004b940000013d002000000002001d0000000401100039000000000201041a000000000002004b000000690000613d000000010220008a000000000021041b000004000100043d000000000200041100000000002104350000004401000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000021b502000041000000040020043f000004000200043d0000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001d00000001001d0000001f01000029000021b90010009c0000110e0000613d0000001f02000029000000000002004b000021b902006041000000010100008a0000001d0310014f000004000100043d001700000003001d000000000303041a001800000003001d000000000003004b000053750000c13d0000001d070000290000000203700039000000000403041a0000000105700039000000000605041a000000000707041a000000000027004b000055fa0000c13d0000001d02000029000000000062041b000055fc0000013d000000400100043d000022350200004100004b940000013d0000001d02000029000000180020006c0000588e0000813d000000000100041100000000001004350000003a01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002100000001001d0000000401100039000000000101041a0000001c0010006b00004b920000813d00000021010000290000000501100039000000000101041a0000001b0010006b00004b920000813d000000000100041100000000001004350000002901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001c020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001b020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0010019000004b920000c13d00000021010000290000000201100039001f00000001001d000000000101041a000022510010009c000000690000613d00000021020000290000000102200039000000000202041a000000000021004b000051130000813d0000001a010000290000000a01100039001d00000001001d000000000101041a000020840210019800005e660000c13d0000002301000039000000000201041a001400000002001d001800010020003e000000690000613d0000001802000029000000000021041b000000400100043d001300000001001d000020950010009c000001950000213d0000001701000029000000000101041a000e00000001001d0000001601000029000000000101041a000f00000001001d0000001d01000029000000000101041a001700000001001d0000001a020000290000000901200039000c00000001001d000000000101041a001000000001001d0000000701200039000000000101041a001100000001001d0000000601200039000b00000001001d000000000101041a001200000001001d0000000501200039000a00000001001d000000000101041a001600000001001d0000001901000029000000000101041a000d00000001001d00000013030000290000022001300039000000400010043f00000018010000290000000001130436001900000001001d0000000101200039000000000201041a000000010320019000000001042002700000007f0440618f002100000004001d0000001f0040008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400400043d001a00000004001d00000021050000290000000004540436002000000004001d000000000003004b000067220000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000210000006b0000000002000019000067280000613d000000000101043b00000000020000190000002003200029000000000401041a000000000043043500000001011000390000002002200039000000210020006c00004b8a0000413d000067280000013d000000400100043d0000220e020000410000000000210435000020820010009c0000208201008041000000400110021000002190011001c700008203000104300000002103000029000020820030009c00002082030080410000004003300210000020820010009c0000208201008041000000c001100210000000000131019f000021a1011001c7820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f00000005064002720000001d0a00002900004bb40000613d000000000701034f0000002108000029000000007907043c00000000089804360000000000a8004b00004bb00000c13d000000000005004b00004bc30000613d0000000506600210000000000761034f00000021066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010020019000004ee40000613d0000001f01400039000000600210018f0000002101200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c000050130000813d000004000100043d000020820010009c000020820100804100002197011000d1000082030001043000000019030000290000000301300210000022510110027f000022510110016700000018020000290000000002020433000000000112016f0000000102300210000000000121019f00004f070000013d001600000007001d0000003f01300039000021b70110019700000016050000290000000001150019000000000051004b00000000040000190000000104004039000020930010009c000001950000213d0000000100400190000001950000c13d000000400010043f00000013010000290000000007150436000000000001004b00004c210000613d00000060010000390000000004000019000000400500043d000020950050009c000001950000213d0000022006500039000000400060043f0000002006500039000000000016043500000200065000390000000000060435000001e0065000390000000000060435000001c0065000390000000000060435000001a00650003900000000000604350000018006500039000000000006043500000160065000390000000000060435000001400650003900000000000604350000012006500039000000000006043500000100065000390000000000060435000000e0065000390000000000060435000000c0065000390000000000060435000000a00650003900000000000604350000008006500039000000000006043500000060065000390000000000060435000000400650003900000000000604350000000000050435000000000647001900000000005604350000002004400039000000000034004b00004bf60000413d0000003f01200039000021b701100197000000400300043d0000000001130019001400000003001d000000000031004b00000000030000190000000103004039000020930010009c000001950000213d0000000100300190000001950000c13d000000400010043f000000110100002900000014030000290000000003130436002100000003001d000000000001004b00004c510000613d00000060010000390000000003000019000000400400043d000021fe0040009c000001950000213d0000012005400039000000400050043f0000002005400039000000000015043500000100054000390000000000050435000000e0054000390000000000050435000000c0054000390000000000050435000000a00540003900000000000504350000008005400039000000000005043500000060054000390000000000050435000000400540003900000000000504350000000000040435000000210530002900000000004504350000002003300039000000000023004b00004c360000413d001500000007001d000004000100043d00000000020100190000001b0010006c00004cf30000813d002000000002001d0000000502200210001d00000002001d0000001a012000290000000201100367000000000101043b000004000200043d00000000001204350000003101000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001e00000001001d000000400100043d001f00000001001d000021b80010009c000001950000213d0000001f020000290000016001200039000000400010043f0000001e03000029000000000103041a00000000051204360000000101300039000000000201041a000000010320019000000001072002700000007f0770618f0000001f0070008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400600043d0000000004760436000000000003004b001c00000005001d00004ca60000613d001700000004001d001800000007001d001900000006001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001805000029000000000005004b00004cac0000613d000000000201043b0000000001000019000000190600002900000017070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000051004b00004c9e0000413d00004cae0000013d00002250012001970000000000140435000000000007004b0000002001000039000000000100601900004cae0000013d000000000100001900000019060000290000003f01100039000022530210019700000000030600190000000001620019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000001c0100002900000000003104350000001e040000290000000201400039000000000101041a0000001f03000029000000400230003900000000001204350000000301400039000000000101041a000000600230003900000000001204350000000401400039000000000101041a000000800230003900000000001204350000000501400039000000000101041a000000a00230003900000000001204350000000601400039000000000101041a000000c00230003900000000001204350000000701400039000000000101041a000000e00230003900000000001204350000000801400039000000000101041a000000ff001001900000000001000019000000010100c039000001000230003900000000001204350000000901400039000000000101041a0000012002300039000000000012043500000140013000390000000a02400039000000000202041a0000000000210435000004e00100043d0000002002000029000000000021004b00004e680000a13d0000001d0100002900000500011000390000000000310435000004e00100043d000000000021004b00004e680000a13d00000001022000390000001b0020006c00004c560000413d000004000200043d000000130020006c00004db40000813d002000000002001d0000000502200210001d00000002001d00000012012000290000000201100367000000000101043b000004000200043d00000000001204350000002701000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001e00000001001d000000400100043d001f00000001001d000020950010009c00000016050000290000001506000029000001950000213d0000001f020000290000022001200039000000400010043f0000001e03000029000000000103041a00000000071204360000000101300039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400800043d0000000004980436000000000003004b001c00000007001d00004d490000613d001900000004001d001a00000009001d001b00000008001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001a07000029000000000007004b00004d4f0000613d000000000201043b0000000001000019000000160500002900000015060000290000001b0800002900000019090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000071004b00004d410000413d00004d530000013d00002250012001970000000000140435000000000009004b0000002001000039000000000100601900004d530000013d0000000001000019000000160500002900000015060000290000001b080000290000003f01100039000022530210019700000000030800190000000001820019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000001c0100002900000000003104350000001e070000290000000201700039000000000101041a0000001f04000029000000400240003900000000001204350000000301700039000000000101041a000000600240003900000000001204350000000401700039000000000101041a000000800240003900000000001204350000000501700039000000000101041a000000a00240003900000000001204350000000601700039000000000101041a000000c00240003900000000001204350000000701700039000000000101041a000000e002400039000000000012043500000100024000390000000801700039000000000101041a000000ff001001900000000003000019000000010300c03900000000003204350000000802100270000000ff0220018f000000020020008c000044830000213d00000120034000390000000000230435000021d7001001980000000001000019000000010100c039000001400240003900000000001204350000000901700039000000000101041a000001600240003900000000001204350000000a01700039000000000101041a000001800240003900002084031001970000000000320435000021da001001980000000001000019000000010100c039000001a00240003900000000001204350000000b01700039000000000101041a000001c00240003900000000001204350000000c01700039000000000101041a000001e002400039000000000012043500000200014000390000000d02700039000000000202041a000000000021043500000000010504330000002002000029000000000021004b00004e680000a13d0000001d0160002900000000004104350000000001050433000000000021004b00004e680000a13d0000000102200039000000130020006c00004cf50000413d000004000200043d000000110020006c00004e4d0000813d002000000002001d0000000502200210001d00000002001d00000010012000290000000201100367000000000101043b000004000200043d00000000001204350000004501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001e00000001001d000000400100043d001f00000001001d000021fe0010009c000001950000213d0000001f020000290000012001200039000000400010043f0000001e03000029000000000103041a00000000051204360000000101300039000000000201041a000000010320019000000001072002700000007f0770618f0000001f0070008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400600043d0000000004760436000000000003004b001c00000005001d00004e060000613d001900000004001d001a00000007001d001b00000006001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001a05000029000000000005004b00004e0c0000613d000000000201043b00000000010000190000001b0600002900000019070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000051004b00004dfe0000413d00004e0e0000013d00002250012001970000000000140435000000000007004b0000002001000039000000000100601900004e0e0000013d00000000010000190000001b060000290000003f01100039000022530210019700000000030600190000000001620019000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000001c0100002900000000003104350000001e030000290000000201300039000000000101041a0000001f04000029000000400240003900000000001204350000000301300039000000000101041a000000600240003900000000001204350000000401300039000000000101041a000000800240003900000000001204350000000501300039000000000101041a000000a00240003900000000001204350000000601300039000000000101041a0000208401100197000000c0024000390000000000120435000000e0014000390000000702300039000000000202041a00000000002104350000000801300039000000000101041a000000ff0110018f000000020010008c000044830000213d00000100024000390000000000120435000000140100002900000000010104330000002002000029000000000021004b00004e680000a13d0000001d030000290000002101300029000000000041043500000014010000290000000001010433000000000021004b00004e680000a13d0000000102200039000000110020006c00004db60000413d000000400200043d002100000002001d00000060010000390000000001120436002000000001001d0000006002200039000004e001000039820175e80000040f0000000002010019000000210120006a000000200300002900000000001304350000001601000029820174550000040f000000000201001900000021030000290000004001300039000000000332004900000000003104350000001401000029820175970000040f00000021020000290000000001210049000020820020009c0000208202008041000000400220021000000e920000013d0000220c0100004100000000001004350000003201000039000000040010043f000021a10100004100008203000104300000001f0200002900000080032000390000002001000029001a00000003001d000000000013043500000060022000390000002101000029001900000002001d00000000001204350000002d01000039000000000101041a000000010110003a000000690000613d0000002d02000039000000000012041b0000001f020000290000004002200039001800000002001d0000000000120435000000000100041100000000001004350000003301000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000021020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000020020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b000000000100041100000000001004350000003001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000018020000290000000002020433001e00000002001d000000000101043b000021b502000041000000040020043f00000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001700000001001d0000001e01000029000021b90010009c0000590a0000c13d000021dd010000410000000000100435000021de0100004100008203000104300000001f010000290000000201100039001c00000001001d000000000101041a000022510010009c000050780000c13d000004000100043d0000220c0200004100000000002104350000001101000039000000040010043f000004000100043d000020820010009c00002082010080410000004001100210000021a1011001c70000820300010430000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f000000050530027200004ef50000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00004ef10000c13d000000000004004b000029250000613d000041b60000013d0000002003000039000000190020006c00004f040000813d00000019020000290000000302200210000000f80220018f000022510220027f000022510220016700000017033000290000000003030433000000000223016f000000000021041b0000001901000029000000010110021000000001011001bf0000001602000029000000000012041b0000001a040000290000000201400039000005200200043d000000000021041b0000000301400039000005400200043d000000000021041b0000000401400039000005600200043d000000000021041b0000000501400039000005800200043d000000000021041b0000000601400039000005a00200043d000000000021041b0000000701400039000005c00200043d000000000021041b0000000801400039000000000301041a0000225002300197000005e00300043d000000000003004b000000010220c1bf000000000021041b0000000901400039000006000200043d000000000021041b0000000a01400039000006200200043d000000000021041b0000002e01000039000000000501041a00000002060003670000002401600370000000000101043b0000004402600370000000000302043b000000a402600370000000000402043b000000c402600370000000000702043b000000400200043d00000100082000390000002109000029000000000098043500000020096003600000010006000039000000000662043600000120082000390000001d0000006b00004f470000613d0000001d0a000029000000050aa00210000000000aa80019000000000b09034f000000000c08001900000000bd0b043c000000000cdc04360000000000ac004b00004f430000c13d0000001e0000006b00004f580000613d0000001d0a000029000000050aa002100000000009a9034f000000000aa800190000001e0b000029000000030bb00210000000000c0a0433000000000cbc01cf000000000cbc022f000000000909043b000001000bb000890000000009b9022f0000000009b901cf0000000009c9019f00000000009a043500000021088000290000000000080435000000c0082000390000000000780435000000a007200039000000000047043500000080042000390000001f07000029000000000074043500000060042000390000001b070000290000000000740435000000400420003900000000003404350000000000160435000000e0012000390000000000510435000020820020009c000020820200804100000040012002100000001c020000290000012002200039000020820020009c00002082020080410000006002200210000000000121019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d020000390000000203000039000021b2040000410000258f0000013d0000222701000041000000200200002900000fea0000013d00002250011001970000002102000029000000e00220003900000000001204350000001d0000006b000000200200003900000000020060190000003f0120003900002253021001970000001e01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000021040000290000001e0100002900000000021404360000001f030000290000000101300039000000000101041a001d00000002001d00000000001204350000000201300039000000000101041a0000004002400039001e00000002001d00000000001204350000000301300039000000000101041a000000ff0010019000000060014000390000000002000019000000010200c03900000000002104350000000401300039000000000101041a0000008002400039001c00000002001d0000000000120435000000a0024000390000000501300039000000000101041a001f00000002001d0000000000120435000000400100043d002100000001001d0000521e0000613d0000000101000039000000000201041a000021a00100004100000021030000290000000001130436001a00000001001d00000004013000390000000003000411000000000031043500000000010004140000208402200197001b00000002001d000000040020008c0000538e0000c13d0000000104000031000000200040008c0000002004008039000053bc0000013d00002250011001970000002102000029000001200220003900000000001204350000001d0000006b000000200200003900000000020060190000003f0120003900002253021001970000001e01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000021040000290000001e0100002900000000021404360000001f030000290000000101300039000000000101041a001d00000002001d00000000001204350000000201300039000000000101041a0000004002400039001c00000002001d00000000001204350000000301300039000000000101041a0000006002400039001b00000002001d00000000001204350000000401300039000000000101041a0000008002400039001e00000002001d00000000001204350000000501300039000000000101041a000000ff00100190000000a0014000390000000002000019000000010200c03900000000002104350000000601300039000000000101041a000000c002400039001a00000002001d0000000000120435000000e0024000390000000701300039000000000101041a001f00000002001d0000000000120435000000400100043d002100000001001d000052200000613d0000000101000039000000000201041a000021a00100004100000021030000290000000001130436001800000001001d00000004013000390000000003000411000000000031043500000000010004140000208402200197001900000002001d000000040020008c000053d40000c13d0000000104000031000000200040008c0000002004008039000054020000013d000000210200002900000000020204330000001c0020006b0000427d0000213d000004000100043d000000000200041100000000002104350000003601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000202100039000000000302041a000000000003004b000000690000613d000000010330008a000000000032041b0000000601100039000000000201041a0000002003000029000000c0033000390000000003030433000000000232004b000000690000413d000000000021041b000004000100043d000000000200041100000000002104350000003001000039000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000021b502000041000000040020043f00000021020000290000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002100000001001d0000001f01000029000021b90010009c0000110e0000613d000000010100008a000000210210014f000004000100043d001b00000002001d000000000202041a001d00000002001d000000000002004b00005d760000c13d00000021060000290000000202600039000000000302041a0000000104600039000000000504041a000000000606041a0000001f0060006c00005fef0000c13d0000002106000029000000000056041b00005ff10000013d0000001f020000290000000102200039000000000202041a000000000021004b000051130000813d000004000200043d0000000001000411001e00000002001d00000000001204350000002601000039000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000050970000013d0000002101000029002100010010003d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000050ab0000613d0000000101100270000050b90000013d000000000102041a000000000001004b0000000001000019000000010100c039000050b90000613d0000000103200039000000000303041a000000000003004b000050b90000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006b000058470000813d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002101100029000000000101041a001f00000001001d000021b501000041000000040010043f000000200100002900000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000201043b0000225101200167000000000101041a000000000001004b000050e00000613d0000000101100270000050ee0000013d000000000102041a000000000001004b0000000001000019000000010100c039000050ee0000613d0000000103200039000000000303041a000000000003004b000050ee0000613d0000000201200039000000000101041a000000000001004b00000003010000390000000201006039000000210010006c000051100000a13d0000001f02000029000021b90020009c0000000002006019000004000100043d00000000002104350000002701000039000000200010043f000004000100043d000020820010009c00002082010080410000004001100210000001400200043d001f00000002001d0000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000401100039000000000101041a0000001f0010006c000050950000c13d0000001e01000029001e00010010003e000000690000613d000050950000013d000000400100043d0000223b0200004100004b940000013d000000400100043d0000220a0200004100004b940000013d00002250011001970000002002000029000000e00220003900000000001204350000001d0000006b000000200200003900000000020060190000003f0120003900002253021001970000001e01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000020040000290000001e0100002900000000021404360000001f030000290000000101300039000000000101041a001e00000002001d00000000001204350000000201300039000000000101041a000000400240003900000000001204350000000301300039000000000101041a000000ff001001900000000001000019000000010100c039000000600240003900000000001204350000000401300039000000000101041a0000008002400039001d00000002001d0000000000120435000000a0024000390000000501300039000000000101041a002000000002001d0000000000120435000004000100043d000000000200041100000000002104350000003a01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002102000029000000000021041b0000001e0200002900000000020204330000000103100039000000000023041b0000001d0200002900000000020204330000000403100039000000000023041b000000050110003900000020020000290000000002020433000000000021041b000004000100043d000020820010009c000020820100804100002197011000d1000000400200043d002000000002001d0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d02000039000000020300003900002198040000410000000005000411820181f70000040f00000001002001900000732e0000613d0000001801000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b000021890100004100000000001004390000000001000412000000040010044300000024000004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000201043b000004000100043d001f00000002001d00000000002104350000003501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001e00000001001d00000020010000290000209c0010009c000001950000213d00000020010000290000010001100039001d00000001001d000000400010043f0000001e01000029000000000101041a000000010210019000000001031002700000007f0330618f002100000003001d0000001f0030008c00000000030000190000000103002039000000000331013f0000000100300190000003d20000c13d0000001d0300002900000021040000290000000000430435000000000002004b00005f700000613d0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000210000006b000000000200001900005f770000613d00000020020000290000012003200039000000000101043b00000000020000190000000004230019000000000501041a000000000054043500000001011000390000002002200039000000210020006c000051dd0000413d00005f770000013d000000400100043d002100000001001d0000001a010000290000014001100039002000000001001d00000000010104330000001d0010006b0000522f0000813d0000000101000039000000000201041a000021a00100004100000021030000290000000001130436001d00000001001d00000004013000390000000003000411000000000031043500000000010004140000208402200197001f00000002001d000000040020008c0000541a0000c13d0000000103000031000000200030008c00000020040000390000000004034019000054480000013d000000180000006b000052310000c13d001704000000003d000052310000013d0000001f01000029000000200010043f00000020010000290000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001900000001001d000000000101041a002000000001001d000000000001004b000055d20000c13d000004000200043d000052480000013d0000219f0100004100000fe90000013d000021e90100004100000fe90000013d000000210000006b0000000001000019000052270000613d0000001901000029000000000101043300000021040000290000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f000056ef0000013d000021bb0100004100000fe90000013d00000018030000290000000301300210000022510110027f000022510110016700000017020000290000000002020433000000000112016f0000000102300210000000000121019f000054710000013d000021e401000041000000000014043500000004014000390000000000510435000020820040009c00002082040080410000004001400210000021a1011001c70000820300010430000000200050006c000055f70000c13d000000000034041b000000000021041b000000210100002900000000001204350000002701000039000000200010043f000004000100043d000020820010009c002000000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002002000029000000000021041b001f00000001001d0000000101100039001c00000001001d000000000101041a000000010010019000000001021002700000007f0220618f002000000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d000000200000006b0000528d0000613d00000020010000290000001f0010008c0000528b0000a13d0000001c0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000020020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b000052880000813d000000000003041b0000000103300039000000000023004b000052840000413d0000001c02000029000000000002041b001c00000001001d0000001c01000029000000000001041b0000001f030000290000000201300039000004000200043d000000000021041b0000000301300039000000000021041b0000000401300039000000000021041b0000000501300039000000000021041b0000000601300039000000000021041b0000000701300039000000000021041b0000000801300039000000000021041b0000000901300039000000000021041b0000000a01300039000000000021041b0000000b01300039000000000021041b0000000c01300039000000000021041b0000000d01300039000000000021041b000000000100041100000000001204350000002901000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e020000290000004002200039002000000002001d0000000002020433000004000300043d0000000000230435000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e020000290000006002200039001f00000002001d0000000002020433000004000300043d0000000000230435000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a0000225002200197000000000021041b0000001d010000290000000006010433000000200100002900000000010104330000001f0200002900000000020204330000001e0300002900000160033000390000000003030433000000400400043d0000008005400039000000000035043500000060034000390000000000230435000000400240003900000000001204350000002001400039000000210200002900000000002104350000001b010000290000000000140435000020820040009c000020820400804100000040014002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021d4011001c70000800d0200003900000003030000390000224d040000410000000005000411820181f70000040f00000001002001900000732e0000613d0000001e01000029000000a00110003900000000020104330000000001000411820178e90000040f0000001e01000029000000c0011000390000000002010433000000000100041182017a100000040f0000001b0000006b000025920000613d0000000101000039000000000201041a000000400400043d00000024014000390000001b030000290000000000310435000021b3010000410000000001140436002100000001001d00000000010004110000208401100197002000000004001d00000004034000390000000000130435000004000300043d00000000010004140000208404200197000000040040008c00005e780000c13d0000000103000031000000200030008c00000020040000390000000004034019000061170000013d000000400100043d000021fe0010009c000001950000213d0000012002100039000000400020043f00000020031000390000006002000039001b00000003001d0000000000230435000000e0021000390000000000020435000000c002100039000000000002043500000060021000390000000000020435000000400210003900000000000204350000010002100039001800000002001d0000000000020435000000a002100039001900000002001d000000000002043500000000000104350000008001100039001a00000001001d00000000000104350000000a01000039000000000201041a000004000100043d001f00000001001d002000000002001d000000000021004b000053720000813d0000001f02000029000004000100043d002100000002001d00000000002104350000000b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000301043b0000000601300039000000000101041a00002084011001970000001e0010006c000058d40000613d00000021020000290000000102200039000000200020006c000053550000413d0000001f0000006b00005ebd0000c13d000027960000013d0000001d03000029000000200030043f0000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001500000001001d000000000101041a001600000001001d000000000001004b000057d70000c13d000004000100043d000055fe0000013d0000002102000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000021a1011001c70000001b02000029820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f00000005064002720000001a0a000029000053a90000613d000000000701034f0000002108000029000000007907043c00000000089804360000000000a8004b000053a50000c13d000000000005004b000053b80000613d0000000506600210000000000761034f00000021066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000056ac0000613d0000001f01400039000000600110018f0000002103100029000000000013004b00000000020000190000000102004039001a00000003001d000020930030009c000001950000213d0000000100200190000001950000c13d0000001a02000029000000400020043f000000200040008c0000732e0000413d0000001e02000029000000000202043300000021030000290000000003030433000000000023004b000058110000813d000021aa010000410000001a0200002900000fea0000013d0000002102000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000021a1011001c70000001902000029820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000000180a000029000053ef0000613d000000000701034f0000002108000029000000007907043c00000000089804360000000000a8004b000053eb0000c13d000000000005004b000053fe0000613d0000000506600210000000000761034f00000021066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000056c00000613d0000001f01400039000000600110018f0000002103100029000000000013004b00000000020000190000000102004039001800000003001d000020930030009c000001950000213d0000000100200190000001950000c13d0000001802000029000000400020043f000000200040008c00004bd40000413d0000001e02000029000000000202043300000021030000290000000003030433000000000023004b000058290000813d000021aa01000041000000180200002900000fea0000013d0000002102000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000021a1011001c70000001f02000029820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f00000005064002720000001d0a000029000054350000613d000000000701034f0000002108000029000000007907043c00000000089804360000000000a8004b000054310000c13d000000000005004b000054440000613d0000000506600210000000000761034f00000021066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000057930000613d0000001f01400039000000600110018f0000002104100029000000000014004b00000000020000190000000102004039001d00000004001d000020930040009c000001950000213d0000000100200190000001950000c13d0000001d02000029000000400020043f000000200030008c0000732e0000413d0000001a02000029000000e002200039001500000002001d000000000202043300000021040000290000000004040433000000000024004b000058910000813d000021aa010000410000001d0200002900000fea0000013d0000002003000039000000180020006c0000546e0000813d00000018020000290000000302200210000000f80220018f000022510220027f000022510220016700000016033000290000000003030433000000000223016f000000000021041b0000001801000029000000010110021000000001011001bf0000001502000029000000000012041b00000019030000290000000201300039000005200200043d000000000021041b0000000301300039000005400200043d000000000021041b0000000401300039000005600200043d000000000021041b0000000501300039000005800200043d000000000021041b0000000601300039000005a00200043d000000000021041b0000000701300039000005c00200043d000000000021041b0000000801300039000000000301041a0000225002300197000005e00300043d000000000003004b000000010220c1bf000000000021041b000006000300043d000000020030008c000044830000213d000020970220019700000008033002100000ff000330018f000000000223019f000006200300043d000000000003004b00002098030000410000000003006019000000000232019f000000000021041b00000019040000290000000901400039000006400200043d000000000021041b000006600100043d00002084011001970000000a02400039000000000302041a0000209903300197000000000113019f000006800300043d000000000003004b0000209a030000410000000003006019000000000131019f000000000012041b0000000b01400039000006a00200043d000000000021041b0000000c01400039000006c00200043d000000000021041b0000000d01400039000006e00200043d000000000021041b0000002401000039000000000501041a00000002040003670000002401400370000000000101043b0000004402400370000000000302043b000000c402400370000000000602043b000000400200043d000000e007200039000000210800002900000000008704350000002008400360000000e004000039000000000442043600000100072000390000001b09000029000000000009004b0000000509900210000054cf0000613d000000000a970019000000000b08034f000000000c07001900000000bd0b043c000000000cdc04360000000000ac004b000054cb0000c13d0000001d0000006b000054de0000613d000000000898034f00000000099700190000001d0a000029000000030aa00210000000000b090433000000000bab01cf000000000bab022f000000000808043b000001000aa000890000000008a8022f0000000008a801cf0000000008b8019f000000000089043500000021077000290000000000070435000000c0072000390000000000670435000000a0062000390000001e07000029000000000076043500000080062000390000001f07000029000000000076043500000060062000390000001a070000290000000000760435000000400620003900000000003604350000000000140435000020820020009c000020820200804100000040012002100000001c020000290000010002200039000020820020009c00002082020080410000006002200210000000000121019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d0200003900000002030000390000221f040000410000258f0000013d00002212011001c700008009020000390000001d040000290000000005000019820181f70000040f0000000003010019000000600330027000002082033001970000001c0030006c0000001c0500002900000000050340190000001f0450018f0000000505500272000055170000613d000000050650021000000020080000290000000006680019000000000701034f000000007907043c0000000008980436000000000068004b000055130000c13d000000000004004b000055260000613d0000000505500210000000000651034f00000020055000290000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001002001900000557a0000613d0000002001000029000020930010009c000001950000213d0000002001000029000000400010043f000004000200043d000000000100041100000000001204350000003c01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c001100210000020820020009c002100000002001d0000208202008041002000000002001d0000004002200210000000000112019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a0000000102000039000000000202041a000021a50300004100000000003004390000208402200197001d00000002001d0000000400200443001c20840010019c000058020000c13d0000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800202000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000000001004b0000580e0000613d000000400300043d00000024013000390000001e0200002900000000002104350000223001000041000000000013043500000000010004100000208401100197001c00000003001d0000000402300039000000000012043500000000010004140000001d02000029000000040020008c00005dcc0000613d0000001c02000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000210000006b00005da30000c13d00002213011001c70000001d02000029820181f70000040f00000000030100190000006003300270000020820330019700005dc80000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f000000050530027200000005055002100000558b0000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000055870000c13d000000000004004b000029250000613d000041b70000013d0000006002200039000000000202043300000000030304330000006006400039000000000056043500000040054000390000000000350435000000f8022002700000002003400039000000000023043500000000001404350000000000000435000020820040009c000020820400804100000040014002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021e6011001c70000000102000039820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000504400272000055b40000613d000000000601034f0000000007000019000000006806043c000000000007004b0000000007870436000055b00000c13d000000000005004b000055c20000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f0003000000010355000000400400043d0000000100200190000057b30000613d000020820040009c00002082010000410000000001044019000000400110021000000000020004330000208402200198000058410000c13d000021e702000041000000000024043500002190011001c700008203000104300000001c010000290000000101100270000000200010006b000055ef0000613d0000001f02000029000000010220008a00000020032000290000000001210019000000000101041a000000000013041b000004000200043d0000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002002000029000000000021041b0000001c0100002900000001011001bf000000020110008a0000001a02000029000000000012041b000004000200043d0000001901000029000052470000013d000000200030006c000052480000c13d000052470000013d000000000026004b000057ff0000c13d000000000045041b000000000013041b0000001f0200002900000000002104350000004501000039000000200010043f000004000100043d000020820010009c001f00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001f02000029000000000021041b001d00000001001d0000000101100039001800000001001d000000000101041a000000010010019000000001021002700000007f0220618f001f00000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001f0000006b000056430000613d0000001f010000290000001f0010008c000056410000a13d000000180100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001f020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b0000563e0000813d000000000003041b0000000103300039000000000023004b0000563a0000413d0000001802000029000000000002041b001800000001001d0000001801000029000000000001041b0000001d030000290000000201300039000004000200043d000000000021041b0000000301300039000000000021041b0000000401300039000000000021041b0000000501300039000000000021041b0000000601300039000000000021041b0000000701300039000000000021041b0000000801300039000000000021041b000000000100041100000000001204350000004c01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e020000290000000002020433000004000300043d0000000000230435000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001c020000290000000002020433000004000300043d0000000000230435000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a0000225002200197000000000021041b00000021010000290000000008010433000000020080008c000044830000213d0000001a0100002900000000050104330000001c0100002900000000030104330000001e0100002900000000010104330000001402000039000000000202041a0000000a04000039000000000604041a0000001b040000290000000004040433000000400700043d000000010080008c00005f2a0000c13d0000208f0070009c000001950000213d0000004008700039000000400080043f00000003080000390000000000870435000022010900004100005f310000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000056bd0000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000056b90000c13d000000000004004b000029250000613d000029180000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000056d10000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000056cd0000c13d000000000004004b000029180000c13d000029250000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000001a0600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000056da0000c13d000000210020006c000056ec0000813d00000021020000290000000302200210000000f80220018f000022510220027f00002251022001670000001a033000290000000003030433000000000223016f000000000021041b0000002101000029000000010110021000000001011001bf0000001b04000029000000000014041b0000001c0100002900000000010104330000000102400039000000000012041b0000001e0100002900000000010104330000000202400039000000000012041b0000000301400039000000000201041a00002250022001970000001d030000290000000003030433000000000003004b000000010220c1bf000000000021041b000000200100002900000000010104330000000402400039000000000012041b00000005014000390000001f020000290000000002020433000000000021041b0000003801000039000000000101041a000000c00010043f000000400100043d002100000001001d0000209c0010009c000001950000213d00000021020000290000010001200039000000400010043f0000209e0020009c000001950000213d00000021040000290000014002400039000000400020043f0000000c02000039000000000021043500000120024000390000209f030000410000000000320435000000e0034000390000000202000039002000000003001d0000000000230435000000c0034000390000000402000039001f00000003001d00000000002304350000008003400039000000010200008a001e00000003001d000000000023043500000060034000390000001c02000039001c00000003001d000000000023043500000040034000390000000302000039001b00000003001d00000000002304350000002003400039001a00000003001d00000000002304350000000000140435000000a001400039001d00000001001d00000000000104350000003401000039000000000101041a000000010110003a000000690000613d0000003402000039000000000012041b00000000001004350000003501000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001900000001001d00000021010000290000000001010433002100000001001d0000000021010434001700000002001d001800000001001d000020930010009c000001950000213d0000001901000029000000000101041a000000010010019000000001021002700000007f0220618f001500000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001501000029000000200010008c0000577f0000413d000000190100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000018030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000015010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000577f0000813d000000000002041b0000000102200039000000000012004b0000577b0000413d00000018010000290000001f0010008c00005e5a0000a13d000000190100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001802200180000000000101043b000064580000c13d0000002003000039000064640000013d000000400200043d0000001f0430018f000000050530027200000005055002100000579f0000613d0000000006520019000000000701034f0000000008020019000000007907043c0000000008980436000000000068004b0000579b0000c13d000000000004004b000057ad0000613d000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000006001300210000020820020009c00002082020080410000004002200210000000000112019f00008203000104300000001f0230018f0000000505300272000057be0000613d00000005065002100000000006640019000000000701034f0000000008040019000000007907043c0000000008980436000000000068004b000057ba0000c13d000000000002004b000057cd0000613d0000000505500210000000000151034f00000000055400190000000302200210000000000605043300000000062601cf000000000626022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000161019f00000000001504350000006001300210000020820040009c00002082040080410000004002400210000000000112019f00008203000104300000001a0000006b000058a80000c13d001304000000003d000058a80000013d000000180100002900000001011002700018000100100092000000160010006b000057f60000613d00000016010000290000001d0110002900000018030000290000001d02300029000000000202041a000000010110008a000000000021041b000004000100043d0000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001602000029000000000021041b0000001801000029000000010110021000000001011001bf0000001702000029000000000012041b000004000100043d0000001502000029000000000012041b000055fe0000013d000000000024004b000055fe0000c13d000055fd0000013d0000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800202000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000000001004b00005a9f0000c13d000000200100002900002197011000d100008203000104300000001a04000029000000440340003900000000002304350000000002000410000020840220019700000024034000390000000000230435000021a2020000410000000002240436002100000002001d0000000002000411000020840220019700000004034000390000000000230435000004000300043d00000000020004140000001b04000029000000040040008c000058ba0000c13d0000001a01100029000020930010009c000001950000213d000000400010043f00005b020000013d0000001804000029000000440340003900000000002304350000000002000410000020840220019700000024034000390000000000230435000021a2020000410000000002240436002100000002001d0000000002000411000020840220019700000004034000390000000000230435000004000300043d00000000020004140000001904000029000000040040008c000058c70000c13d0000001801100029000020930010009c000001950000213d000000400010043f00005b770000013d000000210020006c00000000020000190000000102006039000000000024043500002191011001c7000082020001042e000004000100043d000001400200043d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000d01100039000000000101041a0000001e0010006b0000588e0000813d000004000100043d000001400200043d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000701100039000000000101041a000000400300043d000000440230003900000000001204350000000001000410000020840110019700000024023000390000000000120435000021a2010000410000000001130436002100000001001d00000000010004110000208401100197002000000003001d00000004023000390000000000120435000004000300043d00000000010004140000001d02000029000000040020008c00005fe20000c13d0000000103000031000000200030008c000000200400003900000000040340190000621d0000013d000000400100043d0000220b0200004100004b940000013d00000019040000290000000604400039002100000004001d000000000404041a0000001a05000029000000c005500039001400000005001d0000000005050433000000000045001a000000690000413d000000000445001900000019050000290000000505500039000000000505041a000000000054004b0000591d0000a13d000021be010000410000001d0200002900000fea0000013d0000001e0000006b00005a950000c13d001604000000003d00005a950000013d0000001a030000290000000301300210000022510110027f000022510110016700000013020000290000000002020433000000000112016f0000000102300210000000000121019f00005a300000013d000000200000006b00005abe0000c13d001904000000003d00005abe0000013d000000200000006b00005ac80000c13d001904000000003d00005ac80000013d0000001a01000029000020820010009c00002082010080410000004001100210000020820020009c0000208202008041000000c002200210000000000112019f000000000003004b00005ad20000c13d000021a4011001c70000001b0200002900005ad60000013d0000001801000029000020820010009c00002082010080410000004001100210000020820020009c0000208202008041000000c002200210000000000112019f000000000003004b00005b470000c13d000021a4011001c7000000190200002900005b4b0000013d001800000003001d000000400100043d001f00000001001d000021fe0010009c000001950000213d0000001f030000290000012001300039000000400010043f0000001802000029000000000102041a0000000001130436001b00000001001d0000000101200039000000000201041a000000010320019000000001042002700000007f0440618f002100000004001d0000001f0040008c00000000040000190000000104002039000000000442013f0000000100400190000003d20000c13d000000400400043d001a00000004001d00000021050000290000000004540436002000000004001d000000000003004b00005e850000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000210000006b000000000200001900005e8b0000613d000000000101043b00000000020000190000002003200029000000000401041a000000000043043500000001011000390000002002200039000000210020006c000059020000413d00005e8b0000013d00000017020000290000225101200167001500000001001d000000000301041a000000200020043f0000001e0000006b0000001e01000029000021b901006041001e00000001001d001600000003001d000000000003004b000061800000c13d0000001701000029000000000101041a000000000001004b00005d5c0000c13d0000001e010000290000001702000029000061990000013d0000001d05000029000000440450003900000000002404350000000002000410000020840220019700000024045000390000000000240435000021a2020000410000000002250436001900000002001d000000000200041100002084022001970000000404500039000000000024043500000000020004140000001f04000029000000040040008c0000595f0000613d0000001d01000029000020820010009c00002082010080410000004001100210000020820020009c0000208202008041000000c002200210000000000112019f000021a4011001c70000001f02000029820181f70000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000000190a0000290000594a0000613d000000000701034f0000001d08000029000000007907043c00000000089804360000000000a8004b000059460000c13d000000000005004b000059590000613d0000000506600210000000000761034f0000001d066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010020019000005d660000613d0000001f01400039000000600110018f0000001d01100029000020930010009c000001950000213d000000400010043f000000200030008c0000732e0000413d0000001d010000290000000001010433000000000001004b0000000002000019000000010200c039000000000021004b0000732e0000c13d00000015010000290000000001010433001f00000001001d0000000101000039000000000101041a0000000e02000039000000000202041a001d00000002001d000000000002004b0000597a0000613d000000010200008a0000001d022000fa0000001f0020006c000032e00000413d0000208402100197000021a5010000410000000000100439001900000002001d00000004002004430000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800202000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000000001004b0000732e0000613d0000001d020000290000001f012000b90000218e0110012a000000400300043d000021a7020000410000000000230435001f00000003001d0000000402300039000000000012043500000000010004140000001902000029000000040020008c000059a90000613d0000001f02000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000021a1011001c70000001902000029820181f70000040f00000000030100190000006003300270000120820030019d00030000000103550000000100200190000068cf0000613d0000001f01000029000020930010009c000001950000213d0000001f01000029000000400010043f0000001a0200002900000080032000390000001b01000029001d00000003001d000000000013043500000060022000390000001c01000029001900000002001d00000000001204350000002d02000039000000000102041a000000010110003a000000690000613d000000000012041b0000001a020000290000004002200039001300000002001d0000000000120435000000000100041100000000001004350000003301000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001c020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001b020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b000000000100041100000000001004350000003001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000013020000290000000002020433001f00000002001d000000000101043b000021b502000041000000040020043f00000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001200000001001d0000001f01000029000021b90010009c00004ecf0000613d00000012020000290000225101200167001000000001001d000000000301041a000000200020043f0000001f0000006b0000001f01000029000021b901006041001f00000001001d001100000003001d000000000003004b00006dad0000c13d0000001201000029000000000101041a000000000001004b00006d3d0000c13d0000001f01000029000000120200002900006dc60000013d00000020030000390000001a0020006c00005a2d0000813d0000001a020000290000000302200210000000f80220018f000022510220027f000022510220016700000012033000290000000003030433000000000223016f000000000021041b0000001a01000029000000010110021000000001011001bf0000001b04000029000000000014041b000000150100002900000000010104330000000102400039000000000012041b000000140100002900000000010104330000000202400039000000000012041b0000000301400039000000000201041a000022500220019700000016030000290000000003030433000000000003004b000000010220c1bf000000000021041b000000170100002900000000010104330000000402400039000000000012041b000000050140003900000018020000290000000002020433000000000021041b0000003801000039000000000501041a000000400100043d000000c00210003900000021030000290000000000320435000000c0020000390000000003210436000000e00410003900000002020003670000001e062003600000001f07000029000000000007004b000000050770021000005a600000613d0000000008740019000000000906034f000000000a040019000000009b09043c000000000aba043600000000008a004b00005a5c0000c13d000000200000006b00005a6f0000613d000000000676034f000000000774001900000020080000290000000308800210000000000907043300000000098901cf000000000989022f000000000606043b0000010008800089000000000686022f00000000068601cf000000000696019f0000000000670435000000210440002900000000000404350000002404200370000000000404043b00000060061000390000001c07000029000000000076043500000040061000390000001d07000029000000000076043500000000004304350000008403200370000000000303043b00000080041000390000000000340435000000a402200370000000000202043b000000a0031000390000000000230435000020820010009c000020820100804100000040011002100000001902000029000000e002200039000020820020009c00002082020080410000006002200210000000000112019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d0200003900000002030000390000218f040000410000258f0000013d0000001e030000290000000301300210000022510110027f000022510110016700000016020000290000000002020433000000000112016f0000000102300210000000000121019f00005bf30000013d000000400300043d00000024013000390000001e02000029000000000021043500002230010000410000000000130435001b00000003001d00000004013000390000001c02000029000000000021043500000000010004140000001d02000029000000040020008c00005e0a0000613d0000001b02000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000210000006b00005de10000c13d00002213011001c70000001d02000029820181f70000040f00000000030100190000006003300270000020820330019700005e060000013d00000020030000290000000301300210000022510110027f000022510110016700000019020000290000000002020433000000000112016f0000000102300210000000000121019f00005c670000013d00000020030000290000000301300210000022510110027f000022510110016700000019020000290000000002020433000000000112016f0000000102300210000000000121019f00005cea0000013d000021a3011001c700008009020000390000001b040000290000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000000210a00002900005ae70000613d000000000701034f0000001a08000029000000007907043c00000000089804360000000000a8004b00005ae30000c13d000000000005004b00005af60000613d0000000506600210000000000761034f0000001a066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010020019000005bbc0000613d0000001f01400039000000600110018f0000001a01100029000020930010009c000001950000213d000000400010043f000000200030008c0000732e0000413d0000001a010000290000000001010433000000000001004b0000000002000019000000010200c039000000000021004b0000732e0000c13d0000001e010000290000000001010433002100000001001d0000000101000039000000000101041a0000000e02000039000000000202041a001b00000002001d000000000002004b00005b170000613d000000010200008a0000001b022000fa000000210020006c000032e00000413d0000208402100197000021a5010000410000000000100439001a00000002001d00000004002004430000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800202000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000000001004b00004bd40000613d0000001b0200002900000021012000b90000218e0110012a000000400300043d000021a7020000410000000000230435002100000003001d00000004023000390000000000120435000004000300043d00000000010004140000001a02000029000000040020008c0000657f0000613d0000002102000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000000003004b000065560000c13d000021a1011001c70000001a02000029820181f70000040f0000000003010019000000600330027000002082033001970000657b0000013d000021a3011001c7000080090200003900000019040000290000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000000210a00002900005b5c0000613d000000000701034f0000001808000029000000007907043c00000000089804360000000000a8004b00005b580000c13d000000000005004b00005b6b0000613d0000000506600210000000000761034f00000018066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010020019000005bd00000613d0000001f01400039000000600110018f0000001801100029000020930010009c000001950000213d000000400010043f000000200030008c0000732e0000413d00000018010000290000000001010433000000000001004b0000000002000019000000010200c039000000000021004b0000732e0000c13d0000001e010000290000000001010433002100000001001d0000000101000039000000000101041a0000000e02000039000000000202041a001900000002001d000000000002004b00005b8c0000613d000000010200008a00000019022000fa000000210020006c000032e00000413d0000208402100197000021a5010000410000000000100439001800000002001d00000004002004430000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800202000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000000001004b00004bd40000613d000000190200002900000021012000b90000218e0110012a000000400300043d000021a7020000410000000000230435002100000003001d00000004023000390000000000120435000004000300043d00000000010004140000001802000029000000040020008c000065f80000613d0000002102000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000000003004b000065cf0000c13d000021a1011001c70000001802000029820181f70000040f000000000301001900000060033002700000208203300197000065f40000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000000050550021000005bcd0000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00005bc90000c13d000000000004004b000029250000613d000029190000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000000050550021000005be10000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00005bdd0000c13d000000000004004b000029250000613d000029190000013d00000020030000390000001e0020006c00005bf00000813d0000001e020000290000000302200210000000f80220018f000022510220027f000022510220016700000015033000290000000003030433000000000223016f000000000021041b0000001e01000029000000010110021000000001011001bf0000001f04000029000000000014041b0000001a0100002900000000010104330000000102400039000000000012041b000000190100002900000000010104330000000202400039000000000012041b000000180100002900000000010104330000000302400039000000000012041b000000170100002900000000010104330000000402400039000000000012041b0000000501400039000000000301041a00002250023001970000001d030000290000000003030433000000000003004b000000010220c1bf000000000021041b0000001b0100002900000000010104330000000602400039000000000012041b00000007014000390000001c020000290000000002020433000000000021041b0000003401000039000000000501041a00000002010003670000002402100370000000000202043b0000004403100370000000000303043b0000006404100370000000000404043b000000c406100370000000000806043b000000e401100370000000000901043b0000010006000039000000400100043d0000000006610436000001000a100039000004e00700043d00000000007a0435000001200a100039000000000007004b00005c330000613d000000000b000019000000000cab0019000005000db00039000000000d0d04330000000000dc0435000000200bb0003900000000007b004b00005c2c0000413d000000000aa7001900000000000a0435000000e00a10003900000000009a0435000000c0091000390000000000890435000000a00810003900000020090000290000000000980435000000800810003900000021090000290000000000980435000000600810003900000000004804350000004004100039000000000034043500000000002604350000001f0270003900002253022001970000012002200039000020820020009c00002082020080410000006002200210000020820010009c00002082010080410000004001100210000000000112019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d02000039000000020300003900002222040000410000258f0000013d0000002003000039000000200020006c00005c640000813d00000020020000290000000302200210000000f80220018f000022510220027f000022510220016700000015033000290000000003030433000000000223016f000000000021041b0000002001000029000000010110021000000001011001bf0000001402000029000000000012041b00000016010000290000000201100039000000000201041a000022500220019700000017030000290000000003030433000000000003004b000000010220c1bf000000000021041b00000018010000290000000001010433002000000001001d0000000021010434001800000002001d001900000001001d000020930010009c000023580000213d00000016010000290000000301100039001700000001001d000000000101041a000000010010019000000001021002700000007f0220618f001600000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001601000029000000200010008c00005cad0000413d000004000100043d00000017020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000019030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000016010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00005cad0000813d000000000002041b0000000102200039000000000012004b00005ca90000413d000004000100043d001600000001001d00000019010000290000001f0010008c00005d900000a13d000000170100002900000016020000290000000000120435000004000100043d000020820010009c001800000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000190220017f000000000101043b000000180020006b000062c30000813d000000180400002900002251034001670000002004400039000000000042004b00000000040220190000000003430019000000050330027000000000043100190000002003000039000000010440003900000020053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b00005cd30000c13d000062c40000013d0000002003000039000000200020006c00005ce70000813d00000020020000290000000302200210000000f80220018f000022510220027f000022510220016700000015033000290000000003030433000000000223016f000000000021041b0000002001000029000000010110021000000001011001bf0000001402000029000000000012041b00000016010000290000000201100039000000000201041a000022500220019700000017030000290000000003030433000000000003004b000000010220c1bf000000000021041b00000018010000290000000001010433002000000001001d0000000021010434001800000002001d001900000001001d000020930010009c000023580000213d00000016010000290000000301100039001700000001001d000000000101041a000000010010019000000001021002700000007f0220618f001600000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001601000029000000200010008c00005d300000413d000004000100043d00000017020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000019030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000016010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00005d300000813d000000000002041b0000000102200039000000000012004b00005d2c0000413d00000019010000290000001f0010008c00005d9f0000a13d000004000100043d00000017020000290000000000210435000004000100043d000020820010009c001800000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000190220017f000000000101043b000000180020006b0000633b0000813d000000180400002900002251034001670000002004400039000000000042004b00000000040220190000000003430019000000050330027000000000043100190000002003000039000000010440003900000020053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b00005d540000c13d0000633c0000013d0000001e0010006c0000619a0000613d00000017020000290000000102200039000000000302041a001600000003001d000000000003004b0000614a0000c13d0000001e01000029000061990000013d000000400200043d0000001f0430018f000000050530027200005d720000613d00000005065002100000000006620019000000000701034f0000000008020019000000007907043c0000000008980436000000000068004b00005d6e0000c13d000000000004004b000057ad0000613d0000000505500210000057a10000013d0000002102000029000000200020043f0000001f020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001900000001001d000000000101041a001a00000001001d000000000001004b000062990000c13d000004000100043d00005ff30000013d000000190000006b000000160100002900005d950000613d0000001801000029000000000101043300000019040000290000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f0000001702000029000000000012041b000062d60000013d000000190000006b000060df0000c13d001804000000003d000060df0000013d00002212011001c7000080090200003900000021030000290000001d040000290000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000210030006c000000210500002900000000050340190000001f0450018f0000000505500272000000050550021000005dba0000613d0000001c080000290000000006580019000000000701034f000000007907043c0000000008980436000000000068004b00005db60000c13d000000000004004b00005dc80000613d000000000651034f0000001c055000290000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010020019000005e340000613d0000001c01000029000020930010009c000001950000213d0000001c01000029000000400010043f000000210000006b0000580e0000c13d000000000100041000000000001004350000003e01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00005e1e0000013d00002212011001c7000080090200003900000021030000290000001d040000290000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000210030006c000000210500002900000000050340190000001f0450018f0000000505500272000000050550021000005df80000613d0000001b080000290000000006580019000000000701034f000000007907043c0000000008980436000000000068004b00005df40000c13d000000000004004b00005e060000613d000000000651034f0000001b055000290000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010020019000005e470000613d0000001b01000029000020930010009c000001950000213d0000001b01000029000000400010043f000000210000006b0000580e0000c13d0000001c0100002900000000001004350000003e01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a0000001e0020002a000000690000413d0000001e02200029000000000021041b000000400100043d0000001f020000290000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000002030000390000223104000041000046840000013d0000002102300029000000000032004b0000732e0000213d0000002102100360000000400100043d0000001f0430018f0000000505300272000000050550021000005e440000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00005e400000c13d000000000004004b000029250000613d000041b70000013d0000002102300029000000000032004b0000732e0000213d0000002102100360000000400100043d0000001f0430018f0000000505300272000000050550021000005e570000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00005e530000c13d000000000004004b000029250000613d000041b70000013d000000180000006b000000000100001900005e5f0000613d0000001701000029000000000101043300000018040000290000000302400210000022510220027f0000225102200167000000000121016f0016000100400218000064710000013d000000400400043d000021a0030000410000000003340436002100000003001d002000000004001d000000040340003900000000040004110000000000430435000021da00100198000060e90000c13d0000000001000414000000040020008c000064aa0000c13d0000000103000031000000200030008c00000020040000390000000004034019000064d60000013d0000002002000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000000003004b000060f10000c13d00002213011001c70000000002040019000060f40000013d000022500120019700000020020000290000000000120435000000210000006b000000200200003900000000020060190000003f0120003900002253021001970000001a01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f0000001b010000290000001a02000029000000000021043500000018040000290000000201400039000000000101041a0000001f05000029000000400250003900000000001204350000000301400039000000000101041a000000600250003900000000001204350000000401400039000000000101041a0000008002500039001a00000002001d00000000001204350000000501400039000000000101041a000000c0025000390000001e030000290000000000320435000000a002500039001900000002001d0000000000120435000000e0015000390000000702400039000000000202041a00000000002104350000000801400039000000000101041a000000ff0110018f000000020010008c000044830000213d0000001f020000290000010002200039001800000002001d0000000000120435000004000100043d000000000200041100000000002104350000003601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002100000001001d0000000801100039000000000101041a0000001d0010006b00005f270000813d00000021010000290000000901100039000000000101041a0000001c0010006b00005f270000813d000000000100041100000000001004350000004c01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001d020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001c020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000101041a000000ff0010019000005f270000c13d00000021020000290000000301200039000000000101041a0000000402200039002000000002001d000000000202041a000000000012004b000065530000813d00000018010000290000000001010433000000020010008c000044830000213d000000010010008c000068e90000613d000000020010008c00006a9f0000c13d000000400200043d000021a0010000410000000001120436002100000001001d001f00000002001d00000004012000390000000002000411000000000021043500000000010004140000001e02000029000000040020008c00006a220000c13d0000000103000031000000200030008c0000002004000039000000000403401900006a4f0000013d000000400100043d000022030200004100004b940000013d0000208f0070009c000001950000213d0000004008700039000000400080043f000000080800003900000000008704350000220009000041000020840a40019700000020087000390000000000980435000000400400043d000000a009400039000000c00b0000390000000000b904350000008009400039000000000059043500000060054000390000000000a50435000000400540003900000000003504350000002003400039000000000013043500000000002404350000000001070433000000c0024000390000000000120435000000e002400039000000000001004b00005f4f0000613d000000000300001900000000052300190000000007830019000000000707043300000000007504350000002003300039000000000013004b00005f480000413d0000001f03100039000022530330019700000000011200190000000000010435000000e001300039000020820010009c00002082010080410000006001100210000020820040009c00002082040080410000004002400210000000000121019f0000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002085011001c70000800d0200003900000003030000390000223c040000410000000005000411820181f70000040f00000001002001900000732e0000613d0000000001000411000000200200002982017a100000040f000000190100002900000000020104330000000001000411820178e90000040f000025920000013d0000225001100197000000200200002900000120022000390000000000120435000000210000006b000000200200003900000000020060190000003f0120003900002253021001970000001d01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f00000020030000290000001d0100002900000000021304360000001e040000290000000101400039000000000101041a002100000002001d00000000001204350000000201400039000000000101041a0000004002300039001d00000002001d00000000001204350000000301400039000000000101041a0000006002300039001c00000002001d00000000001204350000000401400039000000000101041a000000800230003900000000001204350000000501400039000000000101041a000000ff001001900000000001000019000000010100c039000000a00230003900000000001204350000000601400039000000000101041a000000c002300039001b00000002001d0000000000120435000000e0023000390000000701400039000000000101041a002000000002001d0000000000120435000004000100043d000000000200041100000000002104350000003601000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001f02000029000000000021041b000000210200002900000000020204330000000103100039000000000023041b0000001d0200002900000000020204330000000303100039000000000023041b0000001c0200002900000000020204330000000503100039000000000023041b0000001b0200002900000000020204330000000803100039000000000023041b000000090110003900000020020000290000000002020433000000000021041b000004000100043d000020820010009c000020820100804100002197011000d10000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d020000390000000203000039000021990400004100000000050004110000258f0000013d0000002002000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000000003004b000061f60000c13d000021a4011001c70000001d02000029000061fa0000013d0000001f0050006c000062c00000c13d000000000034041b000000000012041b0000001f0200002900000000002104350000003101000039000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002102000029000000000021041b001d00000001001d0000000101100039001b00000001001d000000000101041a000000010010019000000001021002700000007f0220618f002100000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d000000210000006b000060380000613d00000021010000290000001f0010008c000060360000a13d0000001b0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000021020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b000060330000813d000000000003041b0000000103300039000000000023004b0000602f0000413d0000001b02000029000000000002041b001b00000001001d0000001b01000029000000000001041b0000001d030000290000000201300039000004000200043d000000000021041b0000000301300039000000000021041b0000000401300039000000000021041b0000000501300039000000000021041b0000000601300039000000000021041b0000000701300039000000000021041b0000000801300039000000000021041b0000000901300039000000000021041b0000000a01300039000000000021041b000000000100041100000000001204350000003301000039000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e0200002900000021030000290000000000230435000000200010043f000004000100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000170200002900000021030000290000000000230435000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a0000225002200197000000000021041b000004000100043d000000160200002900000000002104350000002f01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000901100039000000000201041a000000010220003a000000690000613d000000000021041b000000400100043d00000060021000390000001703000029000000000032043500000040021000390000001e03000029000000000032043500000020021000390000001f0300002900000000003204350000001c020000290000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021bc011001c70000800d020000390000000303000039000022110400004100000000050004110000001606000029820181f70000040f00000001002001900000732e0000613d0000002001000029000000a00110003900000000020104330000000001000411820178e90000040f0000001c0000006b000025920000613d0000000101000039000000000201041a000000400400043d00000024014000390000001c030000290000000000310435000021b3010000410000000001140436002100000001001d00000000010004110000208401100197002000000004001d00000004034000390000000000130435000004000300043d00000000010004140000208404200197000000040040008c00006c660000c13d0000000103000031000000200030008c0000002004000039000000000403401900006d1b0000013d00000019030000290000000301300210000022510110027f000022510110016700000018020000290000000002020433000000000112016f0000000102300210000000000121019f0000634a0000013d0000000001000414000000040020008c000064e90000c13d0000000103000031000000200030008c00000020040000390000000004034019000065150000013d00002212011001c700008009020000390000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000061040000613d000000000701034f0000002008000029000000007907043c0000000008980436000000210080006c000061000000c13d000000000005004b000061130000613d0000000506600210000000000761034f00000020066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001002001900000612c0000613d0000001f01400039000000600210018f0000002001200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c0000732e0000413d00000020010000290000000001010433000000000001004b0000000002000019000000010200c039000000000021004b0000732e0000c13d000025920000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f000000050530027200000005055002100000613d0000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000061390000c13d000000000004004b000029250000613d000041b70000013d0000001d0010006c000066c60000613d0000000b020000290000000102200039000000000302041a001f00000003001d000000000003004b000066760000c13d0000001d01000029000066c50000013d00000016030000290000001e0030006c0000619a0000613d00000017020000290000000202200039000000000302041a001400000003001d000000000003004b00005d640000613d00000014030000290000001e0030006c0000619a0000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000102000039000000000021041b000000160100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000202000039000000000021041b000000140100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000302000039000000000021041b001600070000003d0000001e0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000000002004b0000619a0000c13d0000001602000029000000010220027000000017032000290000001e04000029000000000043041b0000000102200039000000000021041b000000010120021000000001011001bf0000001502000029000000000012041b0000001801000029000000000101043300000000001004350000003101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000301043b0000001f020000290000000001020433001700000003001d000000000013041b00000020012000390000000001010433001e00000001001d0000000021010434001500000002001d001600000001001d000020930010009c000001950000213d00000017010000290000000101100039001400000001001d000000000101041a000000010010019000000001021002700000007f0220618f001300000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001301000029000000200010008c000061e20000413d000000140100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000016030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000013010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000061e20000813d000000000002041b0000000102200039000000000012004b000061de0000413d00000016010000290000001f0010008c000065280000a13d000000140100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001602200180000000000101043b000068290000c13d0000002003000039000068350000013d000021a3011001c700008009020000390000001d040000290000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f00000005064002720000620a0000613d000000000701034f0000002008000029000000007907043c0000000008980436000000210080006c000062060000c13d000000000005004b000062190000613d0000000506600210000000000761034f00000020066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000062850000613d0000001f01400039000000600210018f0000002001200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c0000732e0000413d00000020010000290000000001010433000000000001004b0000000002000019000000010200c039000000000021004b0000732e0000c13d0000000101000039000000000101041a002100000001001d000004000100043d000001400200043d00000000002104350000002501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000701100039000000000101041a002000000001001d0000000e01000039000000000101041a001f00000001001d000000000001004b000062540000613d000000010100008a0000001f011000fa000000200010006c000032e00000413d00000021010000290000208402100197000021a5010000410000000000100439002100000002001d00000004002004430000000001000414000020820010009c0000208201008041000000c001100210000021a6011001c70000800202000039820181fc0000040f0000000100200190000069a40000613d000000000101043b000000000001004b00004bd40000613d0000001f0200002900000020012000b90000218e0110012a000000400300043d000021a7020000410000000000230435002000000003001d00000004023000390000000000120435000004000300043d00000000010004140000002102000029000000040020008c00006b5f0000613d0000002002000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000000003004b00006b350000c13d000021a1011001c70000002102000029820181f70000040f00000000030100190000006003300270000020820330019700006b5b0000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f00000005053002720000000505500210000062960000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b000062920000c13d000000000004004b000029250000613d000041b70000013d0000001d010000290000000101100270001d0001001000920000001a0010006b000062b80000613d0000001a0100002900000021011000290000001d030000290000002102300029000000000202041a000000010110008a000000000021041b000004000100043d0000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001a02000029000000000021041b0000001d01000029000000010110021000000001011001bf0000001b02000029000000000012041b000004000100043d000000190200002900005ff20000013d0000001f0030006c00005ff30000c13d00005ff20000013d0000002003000039000000190020006c000062cf0000813d00000019020000290000000302200210000000f80220018f000022510220027f000022510220016700000020033000290000000003030433000000000223016f000000000021041b0000001901000029000000010110021000000001011001bf0000001702000029000000000012041b000004000100043d001600000001001d0000000a01000039000000000101041a000000160010006b000062fa0000813d002000160000002d000004000100043d000000200200002900000000002104350000000b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000602100039000000000202041a000000210220014f0000208400200198000063f40000613d0000002002000029002000010020003d0000000a01000039000000000101041a000000200010006b000062db0000413d000000160000006b000053740000613d000000400100043d000000600200003900000000022104360000006004100039000004e00300043d00000000003404350000008004100039000000000003004b0000630d0000613d000000000500001900000000064500190000050007500039000000000707043300000000007604350000002005500039000000000035004b000063060000413d000000000543001900000000000504350000001e0500002900000000005204350000001f02300039000022530220019700000000024200190000000003120049000000400410003900000000003404350000001d0300002900000000030304330000000002320436000000000003004b000063240000613d000000000400001900000000052400190000001f06400029000000000606043300000000006504350000002004400039000000000034004b0000631d0000413d000000000423001900000000000404350000001f03300039000022530330019700000000021200490000000002320019000020820020009c00002082020080410000006002200210000020820010009c00002082010080410000004001100210000000000112019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d02000039000000020300003900002208040000410000258e0000013d0000002003000039000000190020006c000063470000813d00000019020000290000000302200210000000f80220018f000022510220027f000022510220016700000020033000290000000003030433000000000223016f000000000021041b0000001901000029000000010110021000000001011001bf0000001702000029000000000012041b000000400100043d002000000001001d000021fe0010009c000001950000213d0000000a01000039000000000101041a00000020050000290000012002500039000000400020043f0000002003500039000004e002000039001900000003001d000000000023043500000000001504350000004003500039000004000200043d001600000003001d0000000000230435000000c004500039000004000200043d0000002103000029001800000004001d0000000000340435000000a0045000390000001a03000029001700000004001d000000000034043500000080045000390000001b03000029001a00000004001d00000000003404350000006003500039001500000003001d00000000002304350000010004500039000004000200043d0000001c03000029001b00000004001d0000000000340435000000e003500039001c00000003001d0000000000230435000004000200043d00000000001204350000000b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020020000290000000002020433000000000101043b001400000001001d000000000021041b00000019010000290000000001010433002000000001001d0000000021010434001300000002001d001900000001001d000020930010009c000023580000213d00000014010000290000000101100039001200000001001d000000000101041a000000010010019000000001021002700000007f0220618f001100000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001101000029000000200010008c000063c80000413d000004000100043d00000012020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000019030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000011010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000063c80000813d000000000002041b0000000102200039000000000012004b000063c40000413d00000019010000290000001f0010008c000068bd0000a13d000004000100043d00000012020000290000000000210435000004000100043d000020820010009c001300000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000190220017f000000000101043b000000130020006b000069a50000813d000000130400002900002251034001670000002004400039000000000042004b00000000040220190000000003430019000000050330027000000000043100190000002003000039000000010440003900000020053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b000063ec0000c13d000069a60000013d000004e00200043d001900000002001d000020930020009c000023580000213d0000000101100039001800000001001d000000000101041a000000010010019000000001021002700000007f0220618f001700000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001701000029000000200010008c0000642a0000413d000004000100043d00000018020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000019030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000017010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000642a0000813d000000000002041b0000000102200039000000000012004b000064260000413d000004000100043d00000019020000290000001f0020008c000068c10000a13d00000018020000290000000000210435000004000100043d000020820010009c001700000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000190220017f000000000101043b000000170020006b00006add0000813d000000170400002900002251034001670000002004400039000000000042004b0000000004022019000000000343001900000005033002700000000003310019000000200400003900000001033000390000000005040019000004e0045000390000000004040433000000000041041b00000020045000390000000101100039000000000031004b0000644e0000c13d000005000350003900006ade0000013d000000010320008a000000050330027000000000043100190000002003000039000000010440003900000021053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000645d0000c13d000000180020006c0000646f0000813d00000018020000290000000302200210000000f80220018f000022510220027f000022510220016700000021033000290000000003030433000000000223016f000000000021041b0000001801000029000000010110021000000016011001af0000001904000029000000000014041b0000001a0100002900000000010104330000000102400039000000000012041b0000001b0100002900000000010104330000000202400039000000000012041b0000001c0100002900000000010104330000000302400039000000000012041b0000001e0100002900000000010104330000000402400039000000000012041b0000000501400039000000000201041a00002250022001970000001d030000290000000003030433000000000003004b000000010220c1bf000000000021041b0000001f0100002900000000010104330000000602400039000000000012041b000000070140003900000020020000290000000002020433000000000021041b0000003401000039000000000101041a000000800010043f00000140000004430000016000100443000000a00100043d00000020030000390000018000300443000001a0001004430000004001000039000000c00200043d000001c000100443000001e0002004430000006001000039000000e00200043d00000200001004430000022000200443000001000030044300000004010000390000012000100443000020a001000041000082020001042e0000002003000029000020820030009c00002082030080410000004003300210000020820010009c0000208201008041000000c001100210000000000131019f000021a1011001c7820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000064c30000613d000000000701034f0000002008000029000000007907043c0000000008980436000000210080006c000064bf0000c13d000000000005004b000064d20000613d0000000506600210000000000761034f00000020066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000065350000613d0000001f01400039000000600210018f0000002001200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c0000732e0000413d00000020020000290000000002020433000000000002004b00004b3b0000c13d000021dc0200004100004b940000013d0000002003000029000020820030009c00002082030080410000004003300210000020820010009c0000208201008041000000c001100210000000000131019f000021a1011001c7820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f0000000506400272000065020000613d000000000701034f0000002008000029000000007907043c0000000008980436000000210080006c000064fe0000c13d000000000005004b000065110000613d0000000506600210000000000761034f00000020066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000100200190000065440000613d0000001f01400039000000600210018f0000002001200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c0000732e0000413d00000020020000290000000002020433000000000002004b00004b3b0000c13d000021db0200004100004b940000013d000000160000006b00000000010000190000652d0000613d0000001501000029000000000101043300000016040000290000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f000068430000013d000000400200043d0000001f0430018f00000005053002720000000505500210000065410000613d0000000006520019000000000701034f0000000008020019000000007907043c0000000008980436000000000068004b0000653d0000c13d000000000004004b000057a10000c13d000057ad0000013d000000400200043d0000001f0430018f00000005053002720000000505500210000065500000613d0000000006520019000000000701034f0000000008020019000000007907043c0000000008980436000000000068004b0000654c0000c13d000000000004004b000057ad0000613d000057a10000013d000000400100043d000021ff0200004100004b940000013d000021a8011001c70000800902000039001b00000003001d0000001a040000290000000005000019820181f70000040f0000000003010019000000600330027000002082033001970000001b0030006c0000001b0500002900000000050340190000001f0450018f000000050550027200000005055002100000656d0000613d00000021080000290000000006580019000000000701034f000000007907043c0000000008980436000000000068004b000065690000c13d000000000004004b0000657b0000613d000000000651034f00000021055000290000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f000300000001035500000001002001900000664e0000613d0000002101000029000020930010009c000001950000213d0000002101000029000000400010043f000004000100043d000000000001004b000067210000c13d0000002001000029000000000101041a000000010110003a000000690000613d0000002003000029000000000013041b0000001d0100002900000000010104330000000102300039000000000012041b0000001c0100002900000000010104330000000402300039000000000012041b00000005013000390000001f020000290000000002020433000000000021041b000000000100041100000000001004350000003b01000039000000200010043f0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b002100000001001d000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002102000029000000000021041b0000002001000029000000000601041a0000001e010000290000000001010433000000400200043d0000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d020000390000000303000039000021a90400004100000000050004110000258f0000013d000021a8011001c70000800902000039001900000003001d00000018040000290000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000190030006c000000190500002900000000050340190000001f0450018f00000005055002720000000505500210000065e60000613d00000021080000290000000006580019000000000701034f000000007907043c0000000008980436000000000068004b000065e20000c13d000000000004004b000065f40000613d000000000651034f00000021055000290000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000100200190000066620000613d0000002101000029000020930010009c000001950000213d0000002101000029000000400010043f0000002001000029000000000101041a000000010110003a000000690000613d0000002003000029000000000013041b0000001d0100002900000000010104330000000102300039000000000012041b0000001c0100002900000000010104330000000302300039000000000012041b0000001b0100002900000000010104330000000502300039000000000012041b0000001a0100002900000000010104330000000802300039000000000012041b00000009013000390000001f020000290000000002020433000000000021041b000004000100043d000000000200041100000000002104350000003701000039000000200010043f0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000069a40000613d000000000101043b002100000001001d000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000002102000029000000000021041b0000002001000029000000000601041a0000001e010000290000000001010433000000400200043d0000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d020000390000000303000039000021ea0400004100000000050004110000258f0000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f00000005053002720000665f0000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b0000665b0000c13d000000000004004b000029250000613d000029180000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000066730000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b0000666f0000c13d000000000004004b000029250000613d000029180000013d0000001f030000290000001d0030006c000066c60000613d0000000b020000290000000202200039000000000302041a000900000003001d000000000003004b000061480000613d00000009030000290000001d0030006c000066c60000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000102000039000000000021041b0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000202000039000000000021041b000000090100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000302000039000000000021041b001f00070000003d0000001d0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000000002004b000066c60000c13d0000001f0200002900000001022002700000000b032000290000001d04000029000000000043041b0000000102200039000000000021041b000000010120021000000001011001bf0000000a02000029000000000012041b0000001d0100002900000000001004350000002701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001c020000290000000002020433000000000101043b001c00000001001d000000000021041b00000017010000290000000001010433001f00000001001d0000000021010434000b00000002001d001700000001001d000020930010009c000001950000213d0000001c010000290000000101100039000a00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000900000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000000901000029000000200010008c0000670d0000413d0000000a0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000017030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000009010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000670d0000813d000000000002041b0000000102200039000000000012004b000067090000413d00000017010000290000001f0010008c000068b00000a13d0000000a0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001702200180000000000101043b000068fa0000c13d0000002003000039000069060000013d00004bd50000013d000022500120019700000020020000290000000000120435000000210000006b000000200200003900000000020060190000003f0120003900002253021001970000001a01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d0000000d02000029000000ff00200190000000400010043f00000013030000290000020001300039000900000001001d0000000e020000290000000000210435000001c001300039000800000001001d0000000f020000290000000000210435000000170400002900002084014001970000018002300039000700000002001d00000000001204350000016001300039000600000001001d0000001002000029000000000021043500000120023000390000000201000039002000000002001d00000000001204350000000001000019000000010100c0390000010002300039001000000002001d0000000000120435000000e001300039000f00000001001d00000011020000290000000000210435000000c001300039001100000001001d00000012020000290000000000210435000000a001300039001200000001001d0000001602000029000000000021043500000080023000390000001e01000029001600000002001d000000000012043500000060023000390000001b01000029000e00000002001d000000000012043500000040023000390000001c01000029000d00000002001d000000000012043500000019010000290000001a020000290000000000210435000021da004001980000000001000019000000010100c039000001a002300039001700000002001d0000000000120435000001e001300039001a00000001001d00000000000104350000014001300039000500000001001d0000000000010435000000000100041100000000001004350000004301000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001e020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000010220003a000000690000613d000000000021041b0000001501000029000000000101041a000000010110003a000000690000613d0000001502000029000000000012041b000000000100041100000000001004350000002901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001c020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001b020000290000000000200435000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b0000001f01000029000000000101041a000000010110003a000000690000613d0000001f02000029000000000012041b000000180100002900000000001004350000002701000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000013020000290000000002020433000000000101043b001f00000001001d000000000021041b00000019010000290000000001010433002100000001001d0000000021010434001c00000002001d001e00000001001d000020930010009c000001950000213d0000001f010000290000000101100039001b00000001001d000000000101041a000000010010019000000001021002700000007f0220618f001900000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001901000029000000200010008c000068150000413d0000001b0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001e030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000019010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000068150000813d000000000002041b0000000102200039000000000012004b000068110000413d0000001e010000290000001f0010008c00006d500000a13d0000001b0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001e02200180000000000101043b00006ecc0000c13d000000200300003900006ed80000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000001e053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000682e0000c13d000000160020006c000068400000813d00000016020000290000000302200210000000f80220018f000022510220027f00002251022001670000001e033000290000000003030433000000000223016f000000000021041b0000001601000029000000010110021000000001011001bf0000001402000029000000000012041b0000001801000029000000000101043300000017060000290000000202600039000000000012041b000000190100002900000000010104330000000302600039000000000012041b0000001a0100002900000000010104330000000402600039000000000012041b00000005016000390000001f05000029000000a002500039001e00000002001d0000000002020433000000000021041b0000001c0100002900000000010104330000000602600039000000000012041b000000e00250003900000000020204330000000703600039000000000023041b0000000802600039000000000302041a000022500330019700000100045000390000000004040433000000000004004b000000010330c1bf000000000032041b000001200250003900000000020204330000000903600039000000000023041b0000000a0260003900000140035000390000000003030433000000000032041b0000001d02000029000000000202041a000000010220003a000000690000613d0000001d03000029000000000023041b0000001b02000029000000000202041a000000000012001a000000690000413d00000000011200190000001b02000029000000000012041b0000002d01000039000000000101041a000000400400043d00000060024000390000002003000029000000000032043500000040024000390000002103000029000000000032043500000020024000390000000000120435002100000004001d00000000000404350000218901000041000000000010043900000000010004120000000400100443000000200100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000601043b0000002101000029000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021bc011001c70000800d020000390000000303000039000021bd040000410000000005000411820181f70000040f00000001002001900000732e0000613d0000001e0100002900000000020104330000000001000411820180080000040f000012860000013d000000170000006b0000000001000019000068b50000613d0000000b01000029000000000101043300000017040000290000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f000069140000013d000000190000006b000068df0000c13d001304000000003d000068df0000013d000000190000006b0000000002010019000068c50000613d000005000200043d00000019050000290000000303500210000022510330027f0000225103300167000000000232016f0000000103500210000000000232019f0000001803000029000000000023041b00006aee0000013d0000208203300197000000400200043d0000001f0430018f00000005053002720000000505500210000068dc0000613d0000000006520019000000000701034f0000000008020019000000007907043c0000000008980436000000000068004b000068d80000c13d000000000004004b000057ad0000613d000057a10000013d00000019030000290000000301300210000022510110027f000022510110016700000013020000290000000002020433000000000112016f0000000102300210000000000121019f000069b40000013d000000400200043d000021a0010000410000000001120436002100000001001d001f00000002001d00000004012000390000000002000411000000000021043500000000010004140000001e02000029000000040020008c00006a610000c13d0000000103000031000000200030008c0000002004000039000000000403401900006a8e0000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000001f053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b000068ff0000c13d000000170020006c000069110000813d00000017020000290000000302200210000000f80220018f000022510220027f00002251022001670000001f033000290000000003030433000000000223016f000000000021041b0000001701000029000000010110021000000001011001bf0000000a02000029000000000012041b000000150100002900000000010104330000001c030000290000000202300039000000000012041b000000160100002900000000010104330000000302300039000000000012041b000000130100002900000000010104330000000402300039000000000012041b0000001a0100002900000000010104330000000502300039000000000012041b000000190100002900000000010104330000000602300039000000000012041b000000140100002900000000010104330000000702300039000000000012041b0000000801300039000000000201041a00002250022001970000001b030000290000000003030433000000000003004b000000010220c1bf000000000021041b00000018030000290000000003030433000000020030008c000044830000213d000020970220019700000008033002100000ff000330018f000000000223019f0000000c030000290000000003030433000000000003004b00002098030000410000000003006019000000000232019f000000000021041b0000000f0100002900000000010104330000001c040000290000000902400039000000000012041b0000000d01000029000000000101043300002084011001970000000a02400039000000000302041a0000209903300197000000000113019f0000000e030000290000000003030433000000000003004b0000209a030000410000000003006019000000000131019f000000000012041b000000110100002900000000010104330000000b02400039000000000012041b000000100100002900000000010104330000000c02400039000000000012041b0000000d0140003900000012020000290000000002020433000000000021041b0000001e01000029000000000101041a000000010110003a000000690000613d0000001e02000029000000000012041b000000400300043d00000080013000390000000102000039000000000021043500000060013000390000002002000029000000000021043500000040013000390000002102000029000000000021043500000020013000390000001d020000290000000000210435002100000003001d00000000000304350000218901000041000000000010043900000000010004120000000400100443000000600100003900000024001004430000000001000414000020820010009c0000208201008041000000c00110021000002196011001c70000800502000039820181fc0000040f0000000100200190000069a40000613d000000000601043b0000002101000029000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021d4011001c70000800d020000390000000303000039000021d5040000410000000005000411820181f70000040f00000001002001900000732e0000613d0000001a0100002900000000020104330000000001000411820180080000040f00000019010000290000000002010433000000000100041182017ee00000040f000012860000013d000000000001042f0000002003000039000000190020006c000069b10000813d00000019020000290000000302200210000000f80220018f000022510220027f000022510220016700000020033000290000000003030433000000000223016f000000000021041b0000001901000029000000010110021000000001011001bf0000001202000029000000000012041b0000001601000029000000000101043300000014040000290000000202400039000000000012041b000000150100002900000000010104330000000302400039000000000012041b0000001a0100002900000000010104330000000402400039000000000012041b000000170100002900000000010104330000000502400039000000000012041b0000001801000029000000000101043300002084011001970000000602400039000000000302041a0000208303300197000000000113019f000000000012041b00000007014000390000001c020000290000000002020433000000000021041b0000001b010000290000000001010433000000020010008c000044830000213d00000014020000290000000802200039000000000302041a0000225003300197000000000113019f000000000012041b0000000a01000039000000000101041a000000010110003a000000690000613d0000000a02000039000000000012041b0000006002000039000000400100043d00000000022104360000006004100039000004e00300043d00000000003404350000008004100039000000000003004b000069f40000613d000000000500001900000000064500190000050007500039000000000707043300000000007604350000002005500039000000000035004b000069ed0000413d000000000543001900000000000504350000001f0500002900000000005204350000001f02300039000022530220019700000000024200190000000003120049000000400410003900000000003404350000001e0300002900000000030304330000000002320436000000000003004b00006a0b0000613d000000000400001900000000052400190000001d06400029000000000606043300000000006504350000002004400039000000000034004b00006a040000413d000000000423001900000000000404350000001f03300039000022530330019700000000021200490000000002320019000020820020009c00002082020080410000006002200210000020820010009c00002082010080410000004001100210000000000112019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000800d02000039000000020300003900002228040000410000258e0000013d0000001f02000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000021a1011001c70000001e02000029820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f000000050640027200006a3c0000613d000000000701034f0000001f08000029000000007907043c0000000008980436000000210080006c00006a380000c13d000000000005004b00006a4b0000613d0000000506600210000000000761034f0000001f066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010020019000006b0d0000613d0000001f01400039000000600210018f0000001f01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c00004bd40000413d0000001f020000290000000002020433000000000002004b00006a9f0000c13d000064e70000013d0000001f02000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000021a1011001c70000001e02000029820181fc0000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f000000050640027200006a7b0000613d000000000701034f0000001f08000029000000007907043c0000000008980436000000210080006c00006a770000c13d000000000005004b00006a8a0000613d0000000506600210000000000761034f0000001f066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010020019000006b210000613d0000001f01400039000000600210018f0000001f01200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c00004bd40000413d0000001f020000290000000002020433000000000002004b000065260000613d0000001401000039000000000101041a000000010310003a000000690000613d0000001401000039000000000031041b00000018010000290000000002010433000000020020008c000044830000213d000000400100043d002100000001001d000021fe0010009c000001950000213d000000190100002900000000010104330000001a0400002900000000040404330000001b05000029000000000505043300000021080000290000012006800039000000400060043f000000c0078000390000001e06000029001800000007001d0000000000670435000000a006800039001600000006001d00000000001604350000008006800039001900000006001d00000000004604350000002004800039001a00000004001d0000000000540435000000000038043500000060038000390000001c05000029001400000003001d000000000053043500000040038000390000001d04000029001300000003001d00000000004304350000010006800039000004000300043d001700000006001d0000000000260435000000e002800039001500000002001d000000000032043500000000005401a000006c730000c13d000000000001004b001b00000000001d00006c740000613d001b0001001002180000001b011000f9000000020010008c00004ed90000c13d00006c740000013d0000050003000039000000190020006c00006ae80000813d00000019020000290000000302200210000000f80220018f000022510220027f00002251022001670000000003030433000000000223016f000000000021041b0000001901000029000000010110021000000001011001bf0000001802000029000000000012041b000004000100043d000000200200002900000000002104350000000b01000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000004021000390000001a03000029000000000032041b00000005021000390000001b03000029000000000032041b0000000801100039000000000201041a00002250022001970000001c022001af000000000021041b000062fc0000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000000050550021000006b1e0000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00006b1a0000c13d000000000004004b000029190000c13d000029250000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f0000000505300272000000050550021000006b320000613d0000000006510019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00006b2e0000c13d000000000004004b000029250000613d000029190000013d000021a8011001c70000800902000039001f00000003001d00000021040000290000000005000019820181f70000040f0000000003010019000000600330027000002082033001970000001f0030006c0000001f0500002900000000050340190000001f0450018f000000050550027200006b4c0000613d000000050650021000000020080000290000000006680019000000000701034f000000007907043c0000000008980436000000000068004b00006b480000c13d000000000004004b00006b5b0000613d0000000505500210000000000651034f00000020055000290000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f0003000000010355000000010020019000006c520000613d0000002001000029000020930010009c000001950000213d0000002001000029000000400010043f000004000100043d000000800010043f0000002302000039000000000302041a000000010330003a000000690000613d000000e00030043f000000000032041b000001400200043d00000000002104350000002501000039000000200010043f000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b820177150000040f000001200010043f00000020021000390000000002020433000001600020043f00000200021000390000000002020433000001e0031000390000000003030433000001c0041000390000000004040433000001a005100039000000000505043300000180061000390000000006060433000001600710003900000000070704330000014008100039000000000808043300000100091000390000000009090433000000e00a100039000000000a0a0433000000c00b100039000000000b0b0433000000a0011000390000000001010433000000400c00043d000000a000c0043f0000209500c0009c000001950000213d000002200dc000390000004000d0043f000000e00d00043d0000000000dc0435000000a00c00043d000000200cc00039000001600d00043d0000000000dc0435000000a00c00043d000000400cc00039000001000d00043d0000000000dc0435000000a00c00043d000000600cc00039000000c00d00043d0000000000dc0435000000a00c00043d000000800cc00039000001400d00043d0000000000dc0435000000a00c00043d000000a00cc0003900000000001c0435000000a00100043d000000c0011000390000000000b10435000000a00100043d000000e0011000390000000000a10435000000000009004b0000000001000019000000010100c039000000a00900043d00000100099000390000000000190435000000a00100043d000001200110003900000001090000390000000000910435000000000008004b0000000001000019000000010100c039000000a00800043d00000140088000390000000000180435000000a00100043d000001600110003900000000007104350000208401600197000000a00600043d00000180066000390000000000160435000000000005004b0000000001000019000000010100c039000000a00500043d000001a0055000390000000000150435000000a00100043d000001c0011000390000000000410435000000a00100043d000001e0011000390000000000310435000000a00100043d00000200011000390000000000210435000000800100043d000000000200041100000000002104350000002901000039000000200010043f000000800100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000001000200043d00000021030000290000000000230435000000200010043f000000800100043d000020820010009c002100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000c00200043d00000021030000290000000000230435000000200010043f000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b000000800100043d000000000200041100000000002104350000002601000039000000200010043f000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000e00200043d002100000002001d000021b502000041000000040020043f000000800200043d0000000000120435000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d000000e00100043d000000000001004b00006d700000613d000021b90010009c00006d710000c13d000000800100043d0000110f0000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f000000050530027200006c630000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00006c5f0000c13d000000000004004b000029250000613d000041b60000013d0000002002000029000020820020009c00002082020080410000004002200210000020820010009c0000208201008041000000c001100210000000000121019f000000000003004b00006cf50000c13d00002213011001c7000000000204001900006cf80000013d001b00000001001d000004000100043d000000000200041100000000002104350000004c01000039000000200010043f000004000100043d000020820010009c001f00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001d020000290000001f030000290000000000230435000000200010043f000004000100043d000020820010009c001f00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000001c020000290000001f030000290000000000230435000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000022500220019700000001022001bf000000000021041b000004000100043d000000000200041100000000002104350000004401000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001402000039000000000202041a001f00000002001d000000000101043b000021b502000041000000040020043f000004000200043d0000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b001200000001001d0000001f01000029000021b90010009c0000110e0000613d00000012020000290000225101200167001000000001001d000000000301041a000000200020043f0000001f0000006b0000001f01000029000021b901006041001f00000001001d001100000003001d000000000003004b00006fac0000c13d0000001201000029000000000101041a000000000001004b00006d5d0000c13d0000001f01000029000000120200002900006fcb0000013d00002212011001c700008009020000390000000005000019820181f70000040f000000000301001900000060033002700000208203300197000000200030008c000000200400003900000000040340190000001f0540018f000000050640027200006d080000613d000000000701034f0000002008000029000000007907043c0000000008980436000000210080006c00006d040000c13d000000000005004b00006d170000613d0000000506600210000000000761034f00000020066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010020019000006d290000613d0000001f01400039000000600210018f0000002001200029000000000021004b00000000020000190000000102004039000020930010009c000001950000213d0000000100200190000001950000c13d000000400010043f000000200030008c0000732e0000413d000061240000013d000004000200043d0000000004320019000000000034004b0000732e0000213d000000000221034f000000400100043d0000001f0430018f000000050530027200006d3a0000613d00000005065002100000000006610019000000000702034f0000000008010019000000007907043c0000000008980436000000000068004b00006d360000c13d000000000004004b000029250000613d000041b60000013d0000001f0010006c00006dc70000613d00000012020000290000000102200039000000000302041a001100000003001d000000000003004b00006d4e0000613d00000011030000290000001f0030006c00006dc70000613d00000012020000290000000202200039000000000302041a000f00000003001d000000000003004b00006d800000c13d0000001f0100002900006dc60000013d0000001e0000006b000000000100001900006d550000613d0000001c0100002900000000010104330000001e040000290000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f00006ee60000013d0000001f0010006c00006fcc0000613d00000012020000290000000102200039000000000302041a001100000003001d000000000003004b00006d6e0000613d00000011030000290000001f0030006c00006fcc0000613d00000012020000290000000202200039000000000302041a000f00000003001d000000000003004b00006f6b0000c13d0000001f0100002900006fcb0000013d002121b90000004500000020020000290000225101200167001e00000001001d000000000101041a000000200020043f001f00000001001d000000000001004b000070910000c13d0000002001000029000000000101041a000000000001004b00006e300000c13d00000021010000290000002002000029000070b00000013d0000000f030000290000001f0030006c00006dc70000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000102000039000000000021041b000000110100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000202000039000000000021041b0000000f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000302000039000000000021041b001100070000003d0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000000002004b00006dc70000c13d0000001102000029000000010220027000000012032000290000001f04000029000000000043041b0000000102200039000000000021041b000000010120021000000001011001bf0000001002000029000000000012041b0000001301000029000000000101043300000000001004350000003101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000301043b0000001a020000290000000001020433001200000003001d000000000013041b00000020012000390000000001010433001f00000001001d0000000021010434001000000002001d001100000001001d000020930010009c000001950000213d00000012010000290000000101100039000f00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000e00000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000000e01000029000000200010008c00006e0f0000413d0000000f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000011030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000e010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00006e0f0000813d000000000002041b0000000102200039000000000012004b00006e0b0000413d00000011010000290000001f0010008c00006e230000a13d0000000f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001102200180000000000101043b00006e430000c13d000000200300003900006e4f0000013d000000110000006b000000000100001900006e280000613d0000001001000029000000000101043300000011040000290000000302400210000022510220027f0000225102200167000000000121016f0000000102400210000000000121019f00006e5d0000013d000000210010006c000070b10000613d00000020020000290000000102200039000000000302041a001f00000003001d000000000003004b00006e410000613d0000001f03000029000000210030006c000070b10000613d00000020020000290000000202200039000000000302041a001d00000003001d000000000003004b000070500000c13d0000002101000029000070b00000013d000000010320008a00000005033002700000000004310019000000200300003900000001044000390000001f053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b00006e480000c13d000000110020006c00006e5a0000813d00000011020000290000000302200210000000f80220018f000022510220027f00002251022001670000001f033000290000000003030433000000000223016f000000000021041b0000001101000029000000010110021000000001011001bf0000000f02000029000000000012041b0000001301000029000000000101043300000012050000290000000202500039000000000012041b000000190100002900000000010104330000000302500039000000000012041b0000001d0100002900000000010104330000000402500039000000000012041b0000001a01000029000000a0021000390000000501500039001f00000002001d0000000002020433000000000021041b000000140100002900000000010104330000000602500039000000000012041b000000150200002900000000020204330000000703500039000000000023041b0000000802500039000000000302041a000022500330019700000018040000290000000004040433000000000004004b000000010330c1bf000000000032041b000000170200002900000000020204330000000903500039000000000023041b0000000a0250003900000020030000290000000003030433000000000032041b0000001602000029000000000202041a000000010220003a000000690000613d0000001603000029000000000023041b0000002102000029000000000202041a000000000012001a000000690000413d00000000011200190000002102000029000000000012041b0000001e0100002900000000001004350000002f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000901100039000000000201041a000000000002004b000000690000613d000000010220008a000000000021041b0000001501000029000000000101043300000013020000290000000002020433000000400300043d00000060043000390000001b05000029000000000054043500000040043000390000001c050000290000000000540435000000200430003900000000002404350000000000130435000020820030009c000020820300804100000040013002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021bc011001c70000800d020000390000000303000039000021bd0400004100000000050004110000001e06000029820181f70000040f00000001002001900000732e0000613d0000001f01000029000068ac0000013d000000010320008a000000050330027000000000043100190000002003000039000000010440003900000021053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b00006ed10000c13d0000001e0020006c00006ee30000813d0000001e020000290000000302200210000000f80220018f000022510220027f000022510220016700000021033000290000000003030433000000000223016f000000000021041b0000001e01000029000000010110021000000001011001bf0000001b02000029000000000012041b0000000d0100002900000000010104330000001f030000290000000202300039000000000012041b0000000e0100002900000000010104330000000302300039000000000012041b000000160100002900000000010104330000000402300039000000000012041b000000120100002900000000010104330000000502300039000000000012041b000000110100002900000000010104330000000602300039000000000012041b0000000f0100002900000000010104330000000702300039000000000012041b0000000801300039000000000201041a000022500220019700000010030000290000000003030433000000000003004b000000010220c1bf000000000021041b00000020030000290000000003030433000000020030008c000044830000213d000020970220019700000008033002100000ff000330018f000000000223019f00000005030000290000000003030433000000000003004b00002098030000410000000003006019000000000232019f000000000021041b000000060100002900000000010104330000001f040000290000000902400039000000000012041b0000000701000029000000000101043300002084011001970000000a02400039000000000302041a0000209903300197000000000113019f00000017030000290000000003030433000000000003004b0000209a030000410000000003006019000000000131019f000000000012041b000000080100002900000000010104330000000b02400039000000000012041b0000001a0100002900000000010104330000000c02400039000000000012041b0000000d0140003900000009020000290000000002020433000000000021041b000000000100041100000000001004350000002601000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000021b502000041000000040020043f00000000001004350000000001000414000020820010009c0000208201008041000000c001100210000021a8011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b002000000001001d0000001401000029000021d30010009c00004ecf0000613d000000010100008a000000140010006b002100180000002d000021b901006041002100000001601d00000020020000290000225101200167001e00000001001d000000000101041a000000200020043f001f00000001001d000000000001004b000071df0000c13d0000002001000029000000000101041a000000000001004b000071360000c13d00000020010000290000002102000029000000000021041b000071f90000013d0000000f030000290000001f0030006c00006fcc0000613d000004000200043d0000000000120435000004000100043d000020820010009c000e00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000102000039000000000021041b00000011010000290000000e020000290000000000120435000004000100043d000020820010009c001100000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000202000039000000000021041b0000000f0100002900000011020000290000000000120435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000302000039000000000021041b001100070000003d000004000100043d0000001f020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000000002004b00006fcc0000c13d0000001102000029000000010220027000000012032000290000001f04000029000000000043041b0000000102200039000000000021041b000000010120021000000001011001bf0000001002000029000000000012041b0000001401000039000000000101041a000004000200043d00000000001204350000004501000039000000200010043f000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000021020000290000000002020433000000000101043b001f00000001001d000000000021041b0000001a010000290000000001010433002100000001001d0000000021010434001200000002001d001a00000001001d000020930010009c000023580000213d0000001f010000290000000101100039001100000001001d000000000101041a000000010010019000000001021002700000007f0220618f001000000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001001000029000000200010008c000070200000413d000004000100043d00000011020000290000000000210435000004000100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d0000001a030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000010010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000070200000813d000000000002041b0000000102200039000000000012004b0000701c0000413d0000001a010000290000001f0010008c0000704c0000a13d000004000100043d00000011020000290000000000210435000004000100043d000020820010009c001200000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a0000001a0220017f000000000101043b000000120020006b000071490000813d000000120400002900002251034001670000002004400039000000000042004b00000000040220190000000003430019000000050330027000000000043100190000002003000039000000010440003900000021053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b000070440000c13d0000714a0000013d0000001a0000006b000071590000c13d001204000000003d000071590000013d0000001d03000029000000210030006c000070b10000613d000000800200043d0000000000120435000000800100043d000020820010009c001b00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000102000039000000000021041b0000001f010000290000001b020000290000000000120435000000800100043d000020820010009c001f00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000202000039000000000021041b0000001d010000290000001f020000290000000000120435000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000302000039000000000021041b001f00070000003d000000800100043d00000021020000290000000000210435000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000000002004b000070b10000c13d0000001f02000029000000010220027000000020032000290000002104000029000000000043041b0000000102200039000000000021041b000000010120021000000001011001bf0000001e02000029000000000012041b000000800100043d000000e00200043d00000000002104350000002701000039000000200010043f000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000301043b000000a00100043d0000000021010434001f00000003001d000000000013041b0000000001020433002100000001001d0000000021010434001e00000002001d002000000001001d000020930010009c000070d70000a13d000000800100043d0000220c0200004100000000002104350000004101000039000000040010043f000000800100043d00004edf0000013d0000001f010000290000000101100039001d00000001001d000000000101041a000000010010019000000001021002700000007f0220618f001b00000002001d0000001f0020008c00000000020000190000000102002039000000000121013f0000000100100190000003d20000c13d0000001b01000029000000200010008c0000710a0000413d000000800100043d0000001d020000290000000000210435000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d00000020030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000001b010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000710a0000813d000000000002041b0000000102200039000000000012004b000071060000413d00000020010000290000001f0010008c0000719e0000a13d000000800100043d0000001d020000290000000000210435000000800100043d000020820010009c001e00000001001d000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000200200008a000000200220017f000000000101043b0000001e0020006b000071a20000813d0000001e0400002900002251034001670000002004400039000000000042004b00000000040220190000000003430019000000050330027000000000043100190000002003000039000000010440003900000021053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000712e0000c13d000071a30000013d000000210010006c000071f90000613d00000020020000290000000102200039000000000302041a001c00000003001d000000000003004b000071470000613d0000001c03000029000000210030006c000071f90000613d00000020020000290000000202200039000000000302041a001f00000003001d000000000003004b000071b20000c13d0000002101000029000071f80000013d00000020030000390000001a0020006c000071550000813d0000001a020000290000000302200210000000f80220018f000022510220027f000022510220016700000021033000290000000003030433000000000223016f000000000021041b0000001a01000029000000010110021000000001011001bf000071620000013d0000001a030000290000000301300210000022510110027f000022510110016700000012020000290000000002020433000000000112016f0000000102300210000000000121019f0000001102000029000000000012041b000000130100002900000000010104330000001f040000290000000202400039000000000012041b000000140100002900000000010104330000000302400039000000000012041b000000190100002900000000010104330000000402400039000000000012041b000000160100002900000000010104330000000502400039000000000012041b0000001801000029000000000101043300002084011001970000000602400039000000000302041a0000208303300197000000000113019f000000000012041b000000070140003900000015020000290000000002020433000000000021041b00000017010000290000000001010433000000020010008c000044830000213d0000001f020000290000000802200039000000000302041a0000225003300197000000000313019f000000000032041b0000002002000029000000000202041a000000010220003a000000690000613d0000002003000029000000000023041b000000400200043d0000001403000039000000000603041a000000010010008c0000723d0000c13d0000208f0020009c000001950000213d0000004001200039000000400010043f000000030100003900000000001204350000220101000041000072440000013d000000200000006b000072840000c13d001e00800000003d000072840000013d0000002003000039000000200020006c000071ae0000813d00000020020000290000000302200210000000f80220018f000022510220027f000022510220016700000021033000290000000003030433000000000223016f000000000021041b0000002001000029000000010110021000000001011001bf0000728d0000013d0000001f03000029000000210030006c000071f90000613d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000102000039000000000021041b0000001c0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000202000039000000000021041b0000001f0100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000302000039000000000021041b001f00070000003d000000210100002900000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a000000000002004b000071f90000c13d0000001f02000029000000010220027000000020032000290000002104000029000000000043041b0000000102200039000000000021041b000000010120021000000001011001bf0000001e02000029000000000012041b000000000100041100000000001004350000004d01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b000000000201041a002100000002001d000020930020009c000001950000213d00000021020000290000000102200039000000000021041b00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b00000021011000290000001802000029000000000021041b0000000a01000029000000000201041a0000000001000411820180080000040f0000000b01000029000000000201041a000000000100041182017ee00000040f0000001d01000029000000000101041a0000000c02000029000000000202041a000000400300043d0000004004300039000000000024043500002084011001970000002002300039000000000012043500000018010000290000000000130435000020820030009c000020820300804100000040013002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021df011001c70000800d020000390000000203000039000021e004000041000046840000013d0000208f0020009c000001950000213d0000004001200039000000400010043f00000008010000390000000000120435000022000100004100000020032000390000000000130435000000400100043d0000006004100039000004000500043d0000001e07000029000000000074043500000040041000390000001c07000029000000000074043500000020041000390000001d0700002900000000007404350000000000510435000000a004100039000004000500043d000000c0070000390000000000740435000000800410003900000000005404350000000002020433000000c0041000390000000000240435000000e004100039000000000002004b000072660000613d000000000500001900000000074500190000000008350019000000000808043300000000008704350000002005500039000000000025004b0000725f0000413d0000001f03200039000022530330019700000000022400190000000000020435000000e002300039000020820020009c00002082020080410000006002200210000020820010009c00002082010080410000004001100210000000000112019f0000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002085011001c70000800d02000039000000030300003900002202040000410000000005000411820181f70000040f00000001002001900000732e0000613d00000000010004110000001b0200002982017ee00000040f0000001901000029000068ac0000013d00000020030000290000000301300210000022510110027f00002251011001670000001e020000290000000002020433000000000112016f0000000102300210000000000121019f0000001d02000029000000000012041b000000a00100043d000000400210003900000000020204330000001f040000290000000203400039000000000023041b000000600210003900000000020204330000000303400039000000000023041b000000800210003900000000020204330000000403400039000000000023041b000000a00210003900000000020204330000000503400039000000000023041b000000c00210003900000000020204330000000603400039000000000023041b000000e00210003900000000020204330000000703400039000000000023041b0000000802400039000000000302041a000022500330019700000100041000390000000004040433000000000004004b000000010330c1bf000000000032041b00000120041000390000000004040433000000020040008c000044830000213d000020970330019700000008044002100000ff000440018f000000000334019f00000140041000390000000004040433000000000004004b00002098040000410000000004006019000000000343019f000000000032041b000001600210003900000000020204330000001f050000290000000903500039000000000023041b0000018002100039000000000202043300002084022001970000000a03500039000000000403041a0000209904400197000000000224019f000001a0041000390000000004040433000000000004004b0000209a040000410000000004006019000000000242019f000000000023041b000001c00210003900000000020204330000000b03500039000000000023041b000001e00210003900000000020204330000000c03500039000000000023041b0000000d0250003900000200011000390000000001010433000000000012041b0000001c01000029000000000101041a000000010110003a000000690000613d0000001c02000029000000000012041b000000800100043d000001400200043d00000000002104350000002501000039000000200010043f000000800100043d000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000121019f00002092011001c70000801002000039820181fc0000040f00000001002001900000732e0000613d000000000101043b0000000b01100039000000000201041a000000000002004b000000690000613d000000010220008a000000000021041b000001200100043d0000016001100039000000a00200043d000000e00220003900000000020204330000000001010433000000400300043d0000008004300039000001400600043d000000e00500043d000001000700043d000000c00800043d00000000001404350000006001300039000000000081043500000040013000390000000000710435000000200130003900000000005104350000000000230435000020820030009c000020820300804100000040013002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f000021d4011001c70000800d020000390000000303000039000021d5040000410000000005000411820181f70000040f00000001002001900000732e0000613d000000a00100043d000000a00110003900000000020104330000000001000411820180080000040f000000a00100043d000000c0011000390000000002010433000000000100041182017ee00000040f000025920000013d0000000001000019000082030001043000000004010000390000000201100367000000000101043b000000000001004b0000000002000019000000010200c039000000000021004b000073390000c13d000000000001042d000000000100001900008203000104300000002b02000039000000000302041a000000000013004b000073430000a13d0000000000200435000021920110009a0000000002000019000000000001042d0000220c0100004100000000001004350000003201000039000000040010043f000021a10100004100008203000104300001000000000002000000000301041a000100000002001d000000000023004b0000735c0000a13d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f0000000100200190000073620000613d000000000101043b00000001011000290000000002000019000000000001042d0000220c0100004100000000001004350000003201000039000000040010043f000021a101000041000082030001043000000000010000190000820300010430000000000301001900000000040304330000000001420436000000000004004b000073710000613d000000000200001900000020033000390000000005030433000020840550019700000000015104360000000102200039000000000042004b0000736a0000413d000000000001042d0000001f0220003900002253022001970000000001120019000000000021004b00000000020000190000000102004039000020930010009c0000737e0000213d00000001002001900000737e0000c13d000000400010043f000000000001042d0000220c0100004100000000001004350000004101000039000000040010043f000021a10100004100008203000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000190000000104002039000000000043004b000073c30000c13d000000400500043d0000000004650436000000000003004b000073ae0000613d000100000004001d000300000006001d000200000005001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f0000000100200190000073cf0000613d0000000306000029000000000006004b000073b40000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000073a60000413d000073b60000013d00002250012001970000000000140435000000000006004b00000020010000390000000001006019000073b60000013d000000000100001900000002050000290000003f0110003900002253021001970000000001520019000000000021004b00000000020000190000000102004039000020930010009c000073c90000213d0000000100200190000073c90000c13d000000400010043f0000000001050019000000000001042d0000220c0100004100000000001004350000002201000039000000040010043f000021a10100004100008203000104300000220c0100004100000000001004350000004101000039000000040010043f000021a10100004100008203000104300000000001000019000082030001043000000000430104340000000001320436000000000003004b000073dd0000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000073d60000413d000000000231001900000000000204350000001f0230003900002253022001970000000001210019000000000001042d0001000000000002000100000004001d000000200d100039000001600e0000390000000000ed0435000000000021043500000000d2030434000001600310003900000000002304350000018004100039000000000002004b000073f70000613d000000000e000019000000000f4e00190000000003ed0019000000000303043300000000003f0435000000200ee0003900000000002e004b000073f00000413d0000000003240019000000000003043500000140031000390000000000c3043500000120031000390000000000b3043500000000000a004b0000000003000019000000010300c039000001000a10003900000000003a0435000000e0031000390000000000930435000000c0031000390000000000830435000000a003100039000000000073043500000080031000390000000000630435000000600310003900000000005304350000004001100039000000010300002900000000003104350000001f0120003900002253011001970000000001140019000000000001042d00000020061000390000008007000039000000000076043500002084022001970000000000210435000000006203043400000080031000390000000000230435000000a003100039000000000002004b000074260000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000027004b0000741f0000413d00000000062300190000000000060435000000000004004b0000000004000019000000010400c039000000400610003900000000004604350000001f042000390000225304400197000000000643001900000000031600490000006001100039000000000031043500000000430504340000000001360436000000000003004b0000743f0000613d000000000500001900000000061500190000000007540019000000000707043300000000007604350000002005500039000000000035004b000074380000413d000000000431001900000000000404350000001f0330003900002253023001970000000001210019000000000001042d000022540010009c000074530000213d000000630010008c000074530000a13d00000002030003670000000401300370000000000101043b000020840010009c000074530000213d0000002402300370000000000202043b0000004403300370000000000303043b000000000001042d0000000001000019000082030001043000000000040104330000000000420435000000050340021000000000033200190000002003300039000000000004004b000074c70000613d0000022005000039000000000700001900000000080200190000000009230049000000200990008a000000200880003900000000009804350000002001100039000000000901043300000000ba090434000000000aa30436000000000b0b043300000000005a0435000002200d30003900000000ca0b04340000000000ad0435000002400b30003900000000000a004b000074770000613d000000000d000019000000000ebd0019000000000fdc0019000000000f0f04330000000000fe0435000000200dd000390000000000ad004b000074700000413d000000000cab001900000000000c0435000000400c900039000000000c0c0433000000400d3000390000000000cd0435000000600c900039000000000c0c0433000000600d3000390000000000cd0435000000800c900039000000000c0c0433000000800d3000390000000000cd0435000000a00c900039000000000c0c0433000000a00d3000390000000000cd0435000000c00c900039000000000c0c0433000000c00d3000390000000000cd0435000000e00c900039000000000c0c0433000000e00d3000390000000000cd0435000001000c300039000001000d900039000000000d0d043300000000000d004b000000000d000019000000010d00c0390000000000dc0435000001200c900039000000000c0c04330000000300c0008c000074c90000813d000001200d3000390000000000cd0435000001400c900039000000000c0c043300000000000c004b000000000c000019000000010c00c039000001400d3000390000000000cd0435000001600c900039000000000c0c0433000001600d3000390000000000cd0435000001800c900039000000000c0c0433000020840cc00197000001800d3000390000000000cd0435000001a00c900039000000000c0c043300000000000c004b000000000c000019000000010c00c039000001a00d3000390000000000cd0435000001c00c900039000000000c0c0433000001c00d3000390000000000cd0435000001e00c900039000000000c0c0433000001e00d3000390000000000cd043500000200033000390000020009900039000000000909043300000000009304350000001f03a00039000022530330019700000000033b00190000000107700039000000000047004b0000745f0000413d0000000001030019000000000001042d0000220c0100004100000000001004350000002101000039000000040010043f000021a1010000410000820300010430000001000a000039000000000ba1043600000000c2020434000001000a10003900000000002a0435000001200a100039000000000002004b000074df0000613d000000000d000019000000000ead0019000000000fdc0019000000000f0f04330000000000fe0435000000200dd0003900000000002d004b000074d80000413d000000000c2a001900000000000c0435000000e00c10003900000000009c0435000000c0091000390000000000890435000000000007004b0000000007000019000000010700c039000000a008100039000000000078043500000080071000390000000000670435000000600610003900000000005604350000004001100039000000000041043500000000003b04350000001f01200039000022530110019700000000011a0019000000000001042d000000200b100039000001200c0000390000000000cb0435000000000021043500000000b2030434000001200310003900000000002304350000014003100039000000000002004b000075070000613d000000000c000019000000000d3c0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc0003900000000002c004b000075000000413d000000000b23001900000000000b0435000000e00b10003900000000009b04350000208408800197000000c0091000390000000000890435000000a00810003900000000007804350000008007100039000000000067043500000060061000390000000000560435000000400510003900000000004504350000000300a0008c0000751e0000813d00000100011000390000000000a104350000001f0120003900002253011001970000000001130019000000000001042d0000220c0100004100000000001004350000002101000039000000040010043f000021a1010000410000820300010430000000000301001900000000040304330000000001420436000000000004004b000075960000613d00000000020000190000002003300039000000000503043300000000760504340000208406600197000000000661043600000000070704330000000000760435000000400650003900000000060604330000004007100039000000000067043500000060065000390000000006060433000000600710003900000000006704350000008006500039000000000606043300000080071000390000000000670435000000a0065000390000000006060433000000a0071000390000000000670435000000c0065000390000000006060433000000c0071000390000000000670435000000e0065000390000000006060433000000e007100039000000000067043500000100065000390000000006060433000001000710003900000000006704350000012006500039000000000606043300000120071000390000000000670435000001400650003900000000060604330000014007100039000000000067043500000160065000390000000006060433000001600710003900000000006704350000018006500039000000000606043300000180071000390000000000670435000001a0065000390000000006060433000000000006004b0000000006000019000000010600c039000001a0071000390000000000670435000001c0065000390000000006060433000000000006004b0000000006000019000000010600c039000001c0071000390000000000670435000001e0065000390000000006060433000001e007100039000000000067043500000200065000390000000006060433000002000710003900000000006704350000022006500039000000000606043300000220071000390000000000670435000002400650003900000000060604330000024007100039000000000067043500000260065000390000000006060433000000000006004b0000000006000019000000010600c0390000026007100039000000000067043500000280065000390000000006060433000000000006004b0000000006000019000000010600c03900000280071000390000000000670435000002a00650003900000000060604330000208406600197000002a0071000390000000000670435000002c0055000390000000005050433000002c0061000390000000000560435000002e0011000390000000102200039000000000042004b0000752a0000413d000000000001042d00000000040104330000000000420435000000050340021000000000033200190000002003300039000000000004004b000075e00000613d0000012005000039000000000700001900000000080200190000000009230049000000200990008a000000200880003900000000009804350000002001100039000000000b01043300000000a90b04340000000009930436000000000a0a04330000000000590435000001200d30003900000000c90a043400000000009d0435000001400a300039000000000009004b000075b90000613d000000000d000019000000000ead0019000000000fdc0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b000075b20000413d000000000c9a001900000000000c0435000000400cb00039000000000c0c0433000000400d3000390000000000cd0435000000600cb00039000000000c0c0433000000600d3000390000000000cd0435000000800cb00039000000000c0c0433000000800d3000390000000000cd0435000000a00cb00039000000000c0c0433000000a00d3000390000000000cd0435000000c00cb00039000000000c0c0433000020840cc00197000000c00d3000390000000000cd0435000000e00c300039000000e00db00039000000000d0d04330000000000dc0435000001000bb00039000000000b0b04330000000300b0008c000075e20000813d00000100033000390000000000b304350000001f03900039000022530330019700000000033a00190000000107700039000000000047004b000075a10000413d0000000001030019000000000001042d0000220c0100004100000000001004350000002101000039000000040010043f000021a101000041000082030001043000000000040104330000000000420435000000050340021000000000033200190000002003300039000000000004004b0000763b0000613d000001600500003900000000070000190000000008020019000076220000013d000000000cab001900000000000c0435000000400c900039000000000c0c0433000000400d3000390000000000cd0435000000600c900039000000000c0c0433000000600d3000390000000000cd0435000000800c900039000000000c0c0433000000800d3000390000000000cd0435000000a00c900039000000000c0c0433000000a00d3000390000000000cd0435000000c00c900039000000000c0c0433000000c00d3000390000000000cd0435000000e00c900039000000000c0c0433000000e00d3000390000000000cd0435000001000c900039000000000c0c043300000000000c004b000000000c000019000000010c00c039000001000d3000390000000000cd0435000001200c900039000000000c0c0433000001200d3000390000000000cd043500000140033000390000014009900039000000000909043300000000009304350000001f03a00039000022530330019700000000033b00190000000107700039000000000047004b0000763b0000813d0000000009230049000000200990008a000000200880003900000000009804350000002001100039000000000901043300000000ba090434000000000aa30436000000000b0b043300000000005a0435000001600d30003900000000ca0b04340000000000ad0435000001800b30003900000000000a004b000075f30000613d000000000d000019000000000ebd0019000000000fdc0019000000000f0f04330000000000fe0435000000200dd000390000000000ad004b000076330000413d000075f30000013d0000000001030019000000000001042d00000000040104330000000000420435000000050340021000000000033200190000002003300039000000000004004b000076840000613d0000008005000039000000000600001900000000070200190000764b0000013d0000000106600039000000000046004b000076840000813d0000000008230049000000200880008a000000200770003900000000008704350000002001100039000000000801043300000000a908043400002084099001970000000009930436000000000a0a043300000000005904350000008009300039000000000b0a04330000000000b90435000000a00930003900000000000b004b000076630000613d000000000c000019000000200aa00039000000000d0a04330000000009d90436000000010cc000390000000000bc004b0000765d0000413d000000400a800039000000000a0a0433000000000b390049000000400c3000390000000000bc0435000000000b0a04330000000009b9043600000000000b004b000076730000613d000000000c000019000000200aa00039000000000d0a04330000000009d90436000000010cc000390000000000bc004b0000766d0000413d00000060088000390000000008080433000000000a39004900000060033000390000000000a30435000000000a0804330000000003a9043600000000000a004b000076480000613d00000000090000190000002008800039000000000b0804330000000003b3043600000001099000390000000000a9004b0000767d0000413d000076480000013d0000000001030019000000000001042d000000004301043400000000033204360000000004040433000000a0050000390000000000530435000000a00320003900000000540404340000000000430435000000c003200039000000000004004b000076990000613d000000000600001900000000073600190000000008650019000000000808043300000000008704350000002006600039000000000046004b000076920000413d00000000054300190000000000050435000000400510003900000000050504330000004006200039000000000056043500000060051000390000000005050433000000000005004b0000000005000019000000010500c0390000006006200039000000000056043500000080022000390000008001100039000000000101043300000000001204350000001f0140003900002253011001970000000001130019000000000001042d000500000000000200010000000e001d000004c00010043f000004a00020043f000004800030043f000004600040043f0000000203000029000004400030043f0000000000210435000004c00100043d000000200110003900000220020000390000000000210435000004800100043d0000000031010434000004c00200043d00000220042000390000000000140435000002400e200039000000000001004b000076cb0000613d0000000004000019000000000fe400190000000002430019000000000202043300000000002f04350000002004400039000000000014004b000076c40000413d00000000021e00190000000000020435000004c00200043d0000004002200039000004600300043d0000000000320435000004c00200043d00000060022000390000000000520435000004c00200043d00000080022000390000000000620435000004c00200043d000000a0022000390000000000720435000004c00200043d000000c0022000390000000000820435000004c00200043d000000e002200039000000000092043500000000000a004b0000000002000019000000010200c039000004c00300043d000001000330003900000000002304350000000300b0008c0000770f0000813d00000003020000290000000403000029000004c00500043d00000120055000390000000000b5043500000000000c004b0000000005000019000000010500c039000004c00600043d00000140066000390000000000560435000004c00500043d00000160055000390000000000d5043500000001050000290000208405500197000004c00600043d00000180066000390000000000560435000000050000006b0000000004000019000000010400c039000004c00500043d000001a0055000390000000000450435000004c00400043d000001c0044000390000000000340435000004c00300043d000001e0033000390000000000230435000004c00200043d0000020002200039000004400300043d00000000003204350000001f01100039000022530110019700000000011e0019000000000001042d0000220c0100004100000000001004350000002101000039000000040010043f000021a101000041000082030001043000060000000000020000000006010019000000400500043d000022550050009c000077ab0000813d0000022001500039000000400010043f000000000106041a00000000071504360000000101600039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000190000000104002039000000000043004b000077b10000c13d000000400800043d0000000004980436000000000003004b0000774e0000613d000100000004001d000600000009001d000200000008001d000300000007001d000400000006001d000500000005001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f0000000100200190000077bd0000613d0000000609000029000000000009004b000077540000613d000000000201043b00000000010000190000000505000029000000040600002900000003070000290000000208000029000000010a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000091004b000077460000413d000077590000013d00002250012001970000000000140435000000000009004b00000020010000390000000001006019000077590000013d000000000100001900000005050000290000000406000029000000030700002900000002080000290000003f0110003900002253021001970000000001820019000000000021004b00000000020000190000000102004039000020930010009c000077ab0000213d0000000100200190000077ab0000c13d000000400010043f00000000008704350000000201600039000000000101041a000000400250003900000000001204350000000301600039000000000101041a000000600250003900000000001204350000000401600039000000000101041a000000800250003900000000001204350000000501600039000000000101041a000000a00250003900000000001204350000000601600039000000000101041a000000c00250003900000000001204350000000701600039000000000101041a000000e002500039000000000012043500000100025000390000000801600039000000000101041a000000ff001001900000000003000019000000010300c03900000000003204350000000802100270000000ff0220018f000000030020008c000077b70000813d00000120035000390000000000230435000021d7001001980000000001000019000000010100c039000001400250003900000000001204350000000901600039000000000101041a000001600250003900000000001204350000000a01600039000000000101041a000001800250003900002084031001970000000000320435000021da001001980000000001000019000000010100c039000001a00250003900000000001204350000000b01600039000000000101041a000001c00250003900000000001204350000000c01600039000000000101041a000001e00250003900000000001204350000000d01600039000000000101041a000002000250003900000000001204350000000001050019000000000001042d0000220c0100004100000000001004350000004101000039000000040010043f000021a10100004100008203000104300000220c0100004100000000001004350000002201000039000000040010043f000021a10100004100008203000104300000220c0100004100000000001004350000002101000039000000040010043f000021a1010000410000820300010430000000000100001900008203000104300000000002120049000022540020009c000077cb0000213d0000001f0020008c000077cb0000a13d0000000001010433000000000001004b0000000002000019000000010200c039000000000021004b000077cb0000c13d000000000001042d0000000001000019000082030001043000060000000000020000000006010019000000400500043d0000208e0050009c000078460000813d0000016001500039000000400010043f000000000106041a00000000071504360000000101600039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000190000000104002039000000000043004b0000784c0000c13d000000400800043d0000000004980436000000000003004b000078060000613d000100000004001d000600000009001d000200000008001d000300000007001d000400000006001d000500000005001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f0000000100200190000078520000613d0000000609000029000000000009004b0000780c0000613d000000000201043b00000000010000190000000505000029000000040600002900000003070000290000000208000029000000010a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000091004b000077fe0000413d000078110000013d00002250012001970000000000140435000000000009004b00000020010000390000000001006019000078110000013d000000000100001900000005050000290000000406000029000000030700002900000002080000290000003f0110003900002253021001970000000001820019000000000021004b00000000020000190000000102004039000020930010009c000078460000213d0000000100200190000078460000c13d000000400010043f00000000008704350000000201600039000000000101041a000000400250003900000000001204350000000301600039000000000101041a000000600250003900000000001204350000000401600039000000000101041a000000800250003900000000001204350000000501600039000000000101041a000000a00250003900000000001204350000000601600039000000000101041a000000c00250003900000000001204350000000701600039000000000101041a000000e00250003900000000001204350000000801600039000000000101041a000000ff001001900000000001000019000000010100c039000001000250003900000000001204350000000901600039000000000101041a000001200250003900000000001204350000000a01600039000000000101041a000001400250003900000000001204350000000001050019000000000001042d0000220c0100004100000000001004350000004101000039000000040010043f000021a10100004100008203000104300000220c0100004100000000001004350000002201000039000000040010043f000021a101000041000082030001043000000000010000190000820300010430000000400100043d000022560010009c000078640000813d000000a002100039000000400020043f0000002002100039000000600300003900000000003204350000008002100039000000000002043500000060021000390000000000020435000000400210003900000000000204350000000000010435000000000001042d0000220c0100004100000000001004350000004101000039000000040010043f000021a101000041000082030001043000060000000000020000000006010019000000400500043d000022560050009c000078cb0000813d000000a001500039000000400010043f000000000106041a00000000071504360000000101600039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000190000000104002039000000000043004b000078d10000c13d000000400800043d0000000004980436000000000003004b000078a30000613d000100000004001d000600000009001d000200000008001d000300000007001d000400000006001d000500000005001d00000000001004350000000001000414000020820010009c0000208201008041000000c00110021000002094011001c70000801002000039820181fc0000040f0000000100200190000078d70000613d0000000609000029000000000009004b000078a90000613d000000000201043b00000000010000190000000505000029000000040600002900000003070000290000000208000029000000010a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000091004b0000789b0000413d000078ae0000013d00002250012001970000000000140435000000000009004b00000020010000390000000001006019000078ae0000013d000000000100001900000005050000290000000406000029000000030700002900000002080000290000003f0110003900002253021001970000000001820019000000000021004b00000000020000190000000102004039000020930010009c000078cb0000213d0000000100200190000078cb0000c13d000000400010043f00000000008704350000000201600039000000000101041a000000400250003900000000001204350000000301600039000000000101041a000000ff001001900000000001000019000000010100c039000000600250003900000000001204350000000401600039000000000101041a000000800250003900000000001204350000000001050019000000000001042d0000220c0100004100000000001004350000004101000039000000040010043f000021a10100004100008203000104300000220c0100004100000000001004350000002201000039000000040010043f000021a101000041000082030001043000000000010000190000820300010430000000000100041a00002084021001970000000001000411000000000012004b000078df0000c13d000000000001042d000000400200043d0000218a03000041000000000032043500000004032000390000000000130435000020820020009c00002082020080410000004001200210000021a1011001c700008203000104300004000000000002000300000002001d000200000001001d82017c120000040f0000000601000039000000000101041a000000000001004b0000000501000039000079330000613d000000000101041a000400000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007a070000613d000000000201043b0000000407000029000000000027004b0000793f0000813d0000000301000039000000000101041a000000000417004b00007a010000413d000021f10340012a0000000106300039000021f1056000d100000000066500d9000021f10060009c00007a010000c13d000000000015001a00007a010000413d0000000001150019000000000021004b0000000001028019000021f00040009c00007a010000213d000000000571004b00007a010000413d000021fd0040009c0000000002000019000079260000213d000021880230027f00000000032500a900000000022300d9000000000052004b00007a010000c13d000000000003004b000079250000613d0000218e023000d100000000033200d90000218e0030009c000079260000613d00007a010000013d00000000020000190000000603000039000000000303041a000000000003004b00007a080000613d00000000023200d90000000803000039000000000303041a000000000023001a00007a010000413d00000000022300190000000803000039000000000023041b000078f30000013d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007a070000613d000000000201043b0000000501000039000000000021041b00000002010000290000208401100197000400000001001d00000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d0000000802000039000000000202041a000100000002001d000000000101043b000000000101041a000200000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d000000000101043b000000000101041a000000010110006b000000020200002900007a010000413d00000000032100a9000000000002004b0000796c0000613d00000000022300d9000000000012004b00007a010000c13d000200000003001d000000040100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d000000000101043b000000000201041a000021fa012000d1000000000002004b0000000203000029000079850000613d00000000022100d9000021fa0020009c00007a010000c13d000021fc0010009c00007a010000213d000021fb0110009a0000218e0230012a00000000042100a90000218e0030009c0000798d0000413d00000000022400d9000000000012004b00007a010000c13d000200000004001d000000040100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d00000002020000290000218e0220012a000000000101043b000000000301041a000000000023001a00007a010000413d0000000002230019000000000021041b0000000801000039000000000101041a000200000001001d000000040100002900000000001004350000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d000000000101043b0000000202000029000000000021041b0000000601000039000000000101041a000000030110006c00007a010000413d0000000602000039000000000012041b000000040100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d000000000101043b000000000201041a000000030220006c00007a010000413d000000000021041b000000040100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d000000000101043b000000000101041a000400000001001d0000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007a0e0000613d000000000101043b000000000101041a000000400200043d0000002003200039000000000013043500000004010000290000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002092011001c70000800d02000039000000020300003900000000050004110000225704000041820181f70000040f000000010020019000007a0e0000613d000000000001042d0000220c0100004100000000001004350000001101000039000000040010043f000021a1010000410000820300010430000000000001042f0000220c0100004100000000001004350000001201000039000000040010043f000021a1010000410000820300010430000000000100001900008203000104300004000000000002000300000002001d000200000001001d82017c120000040f0000000601000039000000000101041a000000000001004b000000050100003900007a5a0000613d000000000101041a000400000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007b2d0000613d000000000201043b0000000407000029000000000027004b00007a660000813d0000000301000039000000000101041a000000000417004b00007b270000413d000021f10340012a0000000106300039000021f1056000d100000000066500d9000021f10060009c00007b270000c13d000000000015001a00007b270000413d0000000001150019000000000021004b0000000001028019000021f00040009c00007b270000213d000000000571004b00007b270000413d000021fd0040009c000000000200001900007a4d0000213d000021880230027f00000000032500a900000000022300d9000000000052004b00007b270000c13d000000000003004b00007a4c0000613d0000218e023000d100000000033200d90000218e0030009c00007a4d0000613d00007b270000013d00000000020000190000000603000039000000000303041a000000000003004b00007b2e0000613d00000000023200d90000000803000039000000000303041a000000000023001a00007b270000413d00000000022300190000000803000039000000000023041b00007a1a0000013d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007b2d0000613d000000000201043b0000000501000039000000000021041b00000002010000290000208401100197000400000001001d00000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d0000000802000039000000000202041a000100000002001d000000000101043b000000000101041a000200000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d000000000101043b000000000101041a000000010110006b000000020200002900007b270000413d00000000032100a9000000000002004b00007a930000613d00000000022300d9000000000012004b00007b270000c13d000200000003001d000000040100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d000000000101043b000000000201041a000021fa012000d1000000000002004b000000020300002900007aac0000613d000021fc0010009c00007b270000213d00000000022100d9000021fa0020009c00007b270000c13d000021fb0110009a0000218e0230012a00000000042100a90000218e0030009c00007ab40000413d00000000022400d9000000000012004b00007b270000c13d000200000004001d000000040100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d00000002020000290000218e0220012a000000000101043b000000000301041a000000000023001a00007b270000413d0000000002230019000000000021041b0000000801000039000000000101041a000200000001001d000000040100002900000000001004350000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d000000000101043b0000000202000029000000000021041b0000000701000039000000000201041a000000030220006c00007b270000413d000000000021041b000000040100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d000000000101043b000000000201041a000000030220006c00007b270000413d000000000021041b000000040100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d000000000101043b000000000101041a000400000001001d0000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007b340000613d000000000101043b000000000101041a000000400200043d0000002003200039000000000013043500000004010000290000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002092011001c70000800d02000039000000020300003900000000050004110000225804000041820181f70000040f000000010020019000007b340000613d000000000001042d0000220c0100004100000000001004350000001101000039000000040010043f000021a1010000410000820300010430000000000001042f0000220c0100004100000000001004350000001201000039000000040010043f000021a1010000410000820300010430000000000100001900008203000104300003000000000002000200000001001d82017c120000040f0000000601000039000000000101041a000000000001004b000000050100003900007b7f0000613d000000000101041a000300000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007c090000613d000000000201043b0000000307000029000000000027004b00007b8b0000813d0000000301000039000000000101041a000000000417004b00007c030000413d000021f10340012a0000000106300039000021f1056000d100000000066500d9000021f10060009c00007c030000c13d000000000015001a00007c030000413d0000000001150019000000000021004b0000000001028019000021f00040009c00007c030000213d000000000571004b00007c030000413d000021fd0040009c000000000200001900007b720000213d000021880230027f00000000032500a900000000022300d9000000000052004b00007c030000c13d000000000003004b00007b710000613d0000218e023000d100000000033200d90000218e0030009c00007b720000613d00007c030000013d00000000020000190000000603000039000000000303041a000000000003004b00007c0a0000613d00000000023200d90000000803000039000000000303041a000000000023001a00007c030000413d00000000022300190000000803000039000000000023041b00007b3f0000013d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007c090000613d000000000201043b0000000501000039000000000021041b00000002010000290000208401100197000300000001001d00000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007c100000613d0000000802000039000000000202041a000100000002001d000000000101043b000000000101041a000200000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007c100000613d000000000101043b000000000101041a000000010110006b000000020200002900007c030000413d00000000032100a9000000000002004b00007bb80000613d00000000022300d9000000000012004b00007c030000c13d000200000003001d000000030100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007c100000613d000000000101043b000000000201041a000021fa012000d1000000000002004b000000020300002900007bd10000613d00000000022100d9000021fa0020009c00007c030000c13d000021fc0010009c00007c030000213d000021fb0110009a0000218e0230012a00000000042100a90000218e0030009c00007bd90000413d00000000022400d9000000000012004b00007c030000c13d000200000004001d000000030100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007c100000613d00000002020000290000218e0220012a000000000101043b000000000301041a000000000023001a00007c030000413d0000000002230019000000000021041b0000000801000039000000000101041a000200000001001d000000030100002900000000001004350000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007c100000613d000000000101043b0000000202000029000000000021041b000000000001042d0000220c0100004100000000001004350000001101000039000000040010043f000021a1010000410000820300010430000000000001042f0000220c0100004100000000001004350000001201000039000000040010043f000021a1010000410000820300010430000000000100001900008203000104300006000000000002000400000001001d0000208401100197000500000001001d00000000001004350000004b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000000000001004b00007ed00000613d000000050100002900000000001004350000004b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000600000001001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007ed70000613d000000000101043b000000060010006c00007ed00000413d000000050100002900000000001004350000004901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000300000001001d000000050100002900000000001004350000004a01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000200000001001d000000030000006b00007d780000613d000000040100002982017c120000040f0000000601000039000000000101041a000000000001004b00007cae0000613d0000000501000039000000000101041a000600000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007ed70000613d000000000201043b0000000607000029000000000027004b00007cba0000813d0000000301000039000000000101041a000000000417004b00007ed10000413d000021f10340012a0000000106300039000021f1056000d100000000066500d9000021f10060009c00007ed10000c13d000000000015001a00007ed10000413d0000000001150019000000000021004b0000000001028019000021f00040009c00007ed10000213d000000000571004b00007ed10000413d000021fd0040009c000000000200001900007ca10000213d000021880230027f00000000032500a900000000022300d9000000000052004b00007ed10000c13d000000000003004b00007ca00000613d0000218e023000d100000000033200d90000218e0030009c00007ca10000613d00007ed10000013d00000000020000190000000603000039000000000303041a000000000003004b00007ed80000613d00000000023200d90000000803000039000000000303041a000000000023001a00007ed10000413d00000000022300190000000803000039000000000023041b00007c6e0000013d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007ed70000613d000000000201043b0000000501000039000000000021041b000000050100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d0000000802000039000000000202041a000100000002001d000000000101043b000000000101041a000600000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000000010110006b000000060200002900007ed10000413d00000000032100a9000000000002004b00007ce50000613d00000000022300d9000000000012004b00007ed10000c13d000600000003001d000000050100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000201041a000021fa012000d1000000000002004b000000060300002900007cfe0000613d00000000022100d9000021fa0020009c00007ed10000c13d000021fc0010009c00007ed10000213d000021fb0110009a0000218e0230012a00000000042100a90000218e0030009c00007d060000413d00000000022400d9000000000012004b00007ed10000c13d000600000004001d000000050100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d00000006020000290000218e0220012a000000000101043b000000000301041a000000000023001a00007ed10000413d0000000002230019000000000021041b0000000801000039000000000101041a000600000001001d000000050100002900000000001004350000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b0000000602000029000000000021041b0000000701000039000000000201041a000000030220006c00007ed10000413d000000000021041b000000050100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000201041a000000030220006c00007ed10000413d000000000021041b000000050100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000600000001001d0000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000000400200043d0000002003200039000000000013043500000006010000290000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002092011001c70000800d02000039000000020300003900000000050004110000225804000041820181f70000040f000000010020019000007ede0000613d000000020000006b00007e8d0000613d000000040100002982017c120000040f0000000601000039000000000101041a000000000001004b00007dc20000613d0000000501000039000000000101041a000600000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007ed70000613d000000000201043b0000000607000029000000000027004b00007dce0000813d0000000301000039000000000101041a000000000417004b00007ed10000413d000021f10340012a0000000106300039000021f1056000d100000000066500d9000021f10060009c00007ed10000c13d000000000015001a00007ed10000413d0000000001150019000000000021004b0000000001028019000021f00040009c00007ed10000213d000000000571004b00007ed10000413d000021fd0040009c000000000200001900007db50000213d000021880230027f00000000032500a900000000022300d9000000000052004b00007ed10000c13d000000000003004b00007db40000613d0000218e023000d100000000033200d90000218e0030009c00007db50000613d00007ed10000013d00000000020000190000000603000039000000000303041a000000000003004b00007ed80000613d00000000023200d90000000803000039000000000303041a000000000023001a00007ed10000413d00000000022300190000000803000039000000000023041b00007d820000013d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007ed70000613d000000000201043b0000000501000039000000000021041b000000050100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d0000000802000039000000000202041a000400000002001d000000000101043b000000000101041a000600000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000000040110006b000000060200002900007ed10000413d00000000032100a9000000000002004b00007df90000613d00000000022300d9000000000012004b00007ed10000c13d000600000003001d000000050100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000201041a000021fa012000d1000000000002004b000000060300002900007e120000613d00000000022100d9000021fa0020009c00007ed10000c13d000021fc0010009c00007ed10000213d000021fb0110009a0000218e0230012a00000000042100a90000218e0030009c00007e1a0000413d00000000022400d9000000000012004b00007ed10000c13d000600000004001d000000050100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d00000006020000290000218e0220012a000000000101043b000000000301041a000000000023001a00007ed10000413d0000000002230019000000000021041b0000000801000039000000000101041a000600000001001d000000050100002900000000001004350000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b0000000602000029000000000021041b0000000601000039000000000101041a000000020110006c00007ed10000413d0000000602000039000000000012041b000000050100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000201041a000000020220006c00007ed10000413d000000000021041b000000050100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000600000001001d0000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000101041a000000400200043d0000002003200039000000000013043500000006010000290000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002092011001c70000800d02000039000000020300003900000000050004110000225704000041820181f70000040f000000010020019000007ede0000613d000000050100002900000000001004350000004901000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000001041b000000050100002900000000001004350000004a01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000001041b000000050100002900000000001004350000004b01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f000000010020019000007ede0000613d000000000101043b000000000001041b000000400100043d00000020021000390000000203000029000000000032043500000003020000290000000000210435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002092011001c70000800d02000039000000020300003900002259040000410000000505000029820181f70000040f000000010020019000007ede0000613d000000000001042d0000220c0100004100000000001004350000001101000039000000040010043f000021a1010000410000820300010430000000000001042f0000220c0100004100000000001004350000001201000039000000040010043f000021a1010000410000820300010430000000000100001900008203000104300004000000000002000300000002001d000200000001001d82017c120000040f0000000601000039000000000101041a000000000001004b000000050100003900007f2a0000613d000000000101041a000400000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007fff0000613d000000000201043b0000000407000029000000000027004b00007f360000813d0000000301000039000000000101041a000000000417004b00007ff90000413d000021f10340012a0000000106300039000021f1056000d100000000066500d9000021f10060009c00007ff90000c13d000000000015001a00007ff90000413d0000000001150019000000000021004b0000000001028019000021f00040009c00007ff90000213d000000000571004b00007ff90000413d000021fd0040009c000000000200001900007f1d0000213d000021880230027f00000000032500a900000000022300d9000000000052004b00007ff90000c13d000000000003004b00007f1c0000613d0000218e023000d100000000033200d90000218e0030009c00007f1d0000613d00007ff90000013d00000000020000190000000603000039000000000303041a000000000003004b000080000000613d00000000023200d90000000803000039000000000303041a000000000023001a00007ff90000413d00000000022300190000000803000039000000000023041b00007eea0000013d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f000000010020019000007fff0000613d000000000201043b0000000501000039000000000021041b00000002010000290000208401100197000400000001001d00000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d0000000802000039000000000202041a000100000002001d000000000101043b000000000101041a000200000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d000000000101043b000000000101041a000000010110006b000000020200002900007ff90000413d00000000032100a9000000000002004b00007f630000613d00000000022300d9000000000012004b00007ff90000c13d000200000003001d000000040100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d000000000101043b000000000201041a000021fa012000d1000000000002004b000000020300002900007f7c0000613d000021fc0010009c00007ff90000213d00000000022100d9000021fa0020009c00007ff90000c13d000021fb0110009a0000218e0230012a00000000042100a90000218e0030009c00007f840000413d00000000022400d9000000000012004b00007ff90000c13d000200000004001d000000040100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d00000002020000290000218e0220012a000000000101043b000000000301041a000000000023001a00007ff90000413d0000000002230019000000000021041b0000000801000039000000000101041a000200000001001d000000040100002900000000001004350000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d000000000101043b0000000202000029000000000021041b0000000701000039000000000201041a000000030020002a00007ff90000413d0000000302200029000000000021041b000000040100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d000000000101043b000000000201041a000000030020002a00007ff90000413d0000000302200029000000000021041b000000040100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d000000000101043b000000000101041a000400000001001d0000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000080060000613d000000000101043b000000000101041a000000400200043d0000002003200039000000000013043500000004010000290000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002092011001c70000800d02000039000000020300003900000000050004110000225a04000041820181f70000040f0000000100200190000080060000613d000000000001042d0000220c0100004100000000001004350000001101000039000000040010043f000021a1010000410000820300010430000000000001042f0000220c0100004100000000001004350000001201000039000000040010043f000021a1010000410000820300010430000000000100001900008203000104300004000000000002000200000002001d000400000001001d0000208401100197000300000001001d00000000001004350000002c01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000101043b000000000201041a000000ff002001900000803e0000c13d000022500220019700000001022001bf000000000021041b0000002b02000039000000000102041a0000225b0010009c000081bd0000813d0000000103100039000000000032041b0000000000200435000021920110009a000000000201041a00002083022001970000000303000029000000000232019f000000000021041b000000400100043d0000000000310435000020820010009c000020820100804100000040011002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000001030000390000219304000041820181f70000040f0000000100200190000081bb0000613d0000000401000039000000000201041a000000ff00200190000080660000c13d000022500220019700000001022001bf000000000021041b000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000081b40000613d000000000101043b0000000302000039000000000012041b0000000502000039000000000012041b000000400200043d0000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000001030000390000225c04000041820181f70000040f0000000100200190000081bb0000613d000000030100002900000000001004350000004101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000201043b000000000102041a000000000001004b000080980000c13d000100000002001d0000219d0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000081b40000613d000000000101043b0000000102000029000000000012041b000000400200043d0000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002094011001c70000800d0200003900000002030000390000225d040000410000000305000029820181f70000040f0000000100200190000081bb0000613d000000040100002982017c120000040f0000000601000039000000000101041a000000000001004b000080e00000613d0000000501000039000000000101041a000400000001001d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000081b40000613d000000000201043b0000000407000029000000000027004b000080ec0000813d0000000301000039000000000101041a000000000417004b000081ae0000413d000021f10340012a0000000106300039000021f1056000d100000000066500d9000021f10060009c000081ae0000c13d000000000015001a000081ae0000413d0000000001150019000000000021004b0000000001028019000021f00040009c000081ae0000213d000000000571004b000081ae0000413d000021fd0040009c0000000002000019000080d30000213d000021880230027f00000000032500a900000000022300d9000000000052004b000081ae0000c13d000000000003004b000080d20000613d0000218e023000d100000000033200d90000218e0030009c000080d30000613d000081ae0000013d00000000020000190000000603000039000000000303041a000000000003004b000081b50000613d00000000023200d90000000803000039000000000303041a000000000023001a000081ae0000413d00000000022300190000000803000039000000000023041b000080a00000013d000021ef0100004100000000001004390000000001000414000020820010009c0000208201008041000000c0011002100000219e011001c70000800b02000039820181fc0000040f0000000100200190000081b40000613d000000000201043b0000000501000039000000000021041b000000030100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d0000000802000039000000000202041a000100000002001d000000000101043b000000000101041a000400000001001d0000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000101043b000000000101041a000000010110006b0000000402000029000081ae0000413d00000000032100a9000000000002004b000081170000613d00000000022300d9000000000012004b000081ae0000c13d000400000003001d000000030100002900000000001004350000001001000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000101043b000000000201041a000021fa012000d1000000000002004b0000000403000029000081300000613d000021fc0010009c000081ae0000213d00000000022100d9000021fa0020009c000081ae0000c13d000021fb0110009a0000218e0230012a00000000042100a90000218e0030009c000081380000413d00000000022400d9000000000012004b000081ae0000c13d000400000004001d000000030100002900000000001004350000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d00000004020000290000218e0220012a000000000101043b000000000301041a000000000023001a000081ae0000413d0000000002230019000000000021041b0000000801000039000000000101041a000400000001001d000000030100002900000000001004350000001201000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000101043b0000000402000029000000000021041b0000000601000039000000000101041a000000020010002a000081ae0000413d00000002011000290000000602000039000000000012041b000000030100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000101043b000000000201041a000000020020002a000081ae0000413d0000000202200029000000000021041b000000030100002900000000001004350000000f01000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000101043b000000000101041a000400000001001d0000001101000039000000200010043f0000000001000414000020820010009c0000208201008041000000c00110021000002092011001c70000801002000039820181fc0000040f0000000100200190000081bb0000613d000000000101043b000000000101041a000000400200043d0000002003200039000000000013043500000004010000290000000000120435000020820020009c000020820200804100000040012002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002092011001c70000800d02000039000000020300003900000000050004110000225e04000041820181f70000040f0000000100200190000081bb0000613d000000000001042d0000220c0100004100000000001004350000001101000039000000040010043f000021a1010000410000820300010430000000000001042f0000220c0100004100000000001004350000001201000039000000040010043f000021a1010000410000820300010430000000000100001900008203000104300000220c0100004100000000001004350000004101000039000000040010043f000021a1010000410000820300010430000000000001042f000020820010009c00002082010080410000004001100210000020820020009c00002082020080410000006002200210000000000112019f0000000002000414000020820020009c0000208202008041000000c002200210000000000112019f00002085011001c70000801002000039820181fc0000040f0000000100200190000081d70000613d000000000101043b000000000001042d0000000001000019000082030001043000000000050100190000000000200439000000050030008c000081e70000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b000081df0000413d000020820030009c000020820300804100000060013002100000000002000414000020820020009c0000208202008041000000c002200210000000000112019f0000225f011001c70000000002050019820181fc0000040f0000000100200190000081f60000613d000000000101043b000000000001042d000000000001042f000081fa002104210000000102000039000000000001042d0000000002000019000000000001042d000081ff002104230000000102000039000000000001042d0000000002000019000000000001042d0000820100000432000082020001042e0000820300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff02000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000002a300000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000354a6ba7a180000000000000000000000000000000000000000000000000000000000000278d00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000fffffffffffffea0000000000000000000000000000000000000000000000000ffffffffffffffbf53746172746572204e6f6465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009896800200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0200000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffddf537461727465722052656c696300000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000010000000000000000000000000000000000000000000000000000000000010000ffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000000000000000000000000000fffffffffffffeff537461727465722048616e676172000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffebf537461727465722053686970000000000000000000000000000000000000000000000002000000000000000000000000000001400000010000000000000000001e4fbdf70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000010000000000000000000000000000000000000000000000000000000000000000000000000084ae2bc500000000000000000000000000000000000000000000000000000000b91f4fd000000000000000000000000000000000000000000000000000000000d97bbb2800000000000000000000000000000000000000000000000000000000e92820e500000000000000000000000000000000000000000000000000000000fad425b400000000000000000000000000000000000000000000000000000000ff30233800000000000000000000000000000000000000000000000000000000ff30233900000000000000000000000000000000000000000000000000000000ff68885e00000000000000000000000000000000000000000000000000000000ffc165f100000000000000000000000000000000000000000000000000000000fad425b500000000000000000000000000000000000000000000000000000000fcd77fa200000000000000000000000000000000000000000000000000000000feac5f5600000000000000000000000000000000000000000000000000000000f4ebba5400000000000000000000000000000000000000000000000000000000f4ebba5500000000000000000000000000000000000000000000000000000000f681570200000000000000000000000000000000000000000000000000000000f8f2d74c00000000000000000000000000000000000000000000000000000000e92820e600000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000e31e2be500000000000000000000000000000000000000000000000000000000e4e286d000000000000000000000000000000000000000000000000000000000e4e286d100000000000000000000000000000000000000000000000000000000e526fc3100000000000000000000000000000000000000000000000000000000e709c0e700000000000000000000000000000000000000000000000000000000e31e2be600000000000000000000000000000000000000000000000000000000e486033900000000000000000000000000000000000000000000000000000000df88b69300000000000000000000000000000000000000000000000000000000df88b69400000000000000000000000000000000000000000000000000000000e237725d00000000000000000000000000000000000000000000000000000000e272b89200000000000000000000000000000000000000000000000000000000d97bbb2900000000000000000000000000000000000000000000000000000000d98dc97f00000000000000000000000000000000000000000000000000000000ce61f44600000000000000000000000000000000000000000000000000000000d0bb776b00000000000000000000000000000000000000000000000000000000d201915200000000000000000000000000000000000000000000000000000000d201915300000000000000000000000000000000000000000000000000000000d5b6841000000000000000000000000000000000000000000000000000000000d73ec87a00000000000000000000000000000000000000000000000000000000d0bb776c00000000000000000000000000000000000000000000000000000000d1c2b50500000000000000000000000000000000000000000000000000000000d1c8bc4100000000000000000000000000000000000000000000000000000000cebbd55300000000000000000000000000000000000000000000000000000000cebbd55400000000000000000000000000000000000000000000000000000000cf6ddd3600000000000000000000000000000000000000000000000000000000d0b9756200000000000000000000000000000000000000000000000000000000ce61f44700000000000000000000000000000000000000000000000000000000ce97c94100000000000000000000000000000000000000000000000000000000c4c75ef300000000000000000000000000000000000000000000000000000000c64dda4d00000000000000000000000000000000000000000000000000000000c64dda4e00000000000000000000000000000000000000000000000000000000c931061100000000000000000000000000000000000000000000000000000000cd4d186600000000000000000000000000000000000000000000000000000000c4c75ef400000000000000000000000000000000000000000000000000000000c51a2bba00000000000000000000000000000000000000000000000000000000bd9d518a00000000000000000000000000000000000000000000000000000000bd9d518b00000000000000000000000000000000000000000000000000000000bdc091f800000000000000000000000000000000000000000000000000000000c49b8be700000000000000000000000000000000000000000000000000000000b91f4fd100000000000000000000000000000000000000000000000000000000bb86daba0000000000000000000000000000000000000000000000000000000096c8d60000000000000000000000000000000000000000000000000000000000a9e21cb600000000000000000000000000000000000000000000000000000000b33f78c900000000000000000000000000000000000000000000000000000000b5a8ca3600000000000000000000000000000000000000000000000000000000b5a8ca3700000000000000000000000000000000000000000000000000000000b6cd584700000000000000000000000000000000000000000000000000000000b72627e900000000000000000000000000000000000000000000000000000000b33f78ca00000000000000000000000000000000000000000000000000000000b496da8b00000000000000000000000000000000000000000000000000000000b4e847a000000000000000000000000000000000000000000000000000000000aa015fed00000000000000000000000000000000000000000000000000000000aa015fee00000000000000000000000000000000000000000000000000000000ade7a4e300000000000000000000000000000000000000000000000000000000b200973e00000000000000000000000000000000000000000000000000000000a9e21cb700000000000000000000000000000000000000000000000000000000a9f8d181000000000000000000000000000000000000000000000000000000009e9925ce00000000000000000000000000000000000000000000000000000000a1174e7c00000000000000000000000000000000000000000000000000000000a1174e7d00000000000000000000000000000000000000000000000000000000a25797a500000000000000000000000000000000000000000000000000000000a9a1cf26000000000000000000000000000000000000000000000000000000009e9925cf00000000000000000000000000000000000000000000000000000000a0182c78000000000000000000000000000000000000000000000000000000009b57cc0e000000000000000000000000000000000000000000000000000000009b57cc0f000000000000000000000000000000000000000000000000000000009bb36867000000000000000000000000000000000000000000000000000000009ca423b30000000000000000000000000000000000000000000000000000000096c8d6010000000000000000000000000000000000000000000000000000000099543d50000000000000000000000000000000000000000000000000000000008f4be94d000000000000000000000000000000000000000000000000000000009451936f0000000000000000000000000000000000000000000000000000000095e7437f0000000000000000000000000000000000000000000000000000000095e74380000000000000000000000000000000000000000000000000000000009618b31c000000000000000000000000000000000000000000000000000000009681d5cb00000000000000000000000000000000000000000000000000000000945193700000000000000000000000000000000000000000000000000000000094fc19e4000000000000000000000000000000000000000000000000000000009151097800000000000000000000000000000000000000000000000000000000915109790000000000000000000000000000000000000000000000000000000093e47a210000000000000000000000000000000000000000000000000000000093e6aca6000000000000000000000000000000000000000000000000000000008f4be94e000000000000000000000000000000000000000000000000000000008fd6f5270000000000000000000000000000000000000000000000000000000089153164000000000000000000000000000000000000000000000000000000008a674569000000000000000000000000000000000000000000000000000000008a67456a000000000000000000000000000000000000000000000000000000008c86446c000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000891531650000000000000000000000000000000000000000000000000000000089235dea0000000000000000000000000000000000000000000000000000000086b3cd250000000000000000000000000000000000000000000000000000000086b3cd260000000000000000000000000000000000000000000000000000000088add5450000000000000000000000000000000000000000000000000000000088c890ef0000000000000000000000000000000000000000000000000000000084ae2bc60000000000000000000000000000000000000000000000000000000084de82780000000000000000000000000000000000000000000000000000000040f5da9d000000000000000000000000000000000000000000000000000000005fd9491c00000000000000000000000000000000000000000000000000000000787a08a5000000000000000000000000000000000000000000000000000000007d127b43000000000000000000000000000000000000000000000000000000008012271b000000000000000000000000000000000000000000000000000000008012271c0000000000000000000000000000000000000000000000000000000082f9c4740000000000000000000000000000000000000000000000000000000083f6c910000000000000000000000000000000000000000000000000000000007d127b44000000000000000000000000000000000000000000000000000000007de0d21a000000000000000000000000000000000000000000000000000000007fa20971000000000000000000000000000000000000000000000000000000007a124bcf000000000000000000000000000000000000000000000000000000007a124bd0000000000000000000000000000000000000000000000000000000007c3004cd000000000000000000000000000000000000000000000000000000007c65df4b00000000000000000000000000000000000000000000000000000000787a08a60000000000000000000000000000000000000000000000000000000078cc54890000000000000000000000000000000000000000000000000000000070f954b100000000000000000000000000000000000000000000000000000000715018a500000000000000000000000000000000000000000000000000000000715018a600000000000000000000000000000000000000000000000000000000772d135b00000000000000000000000000000000000000000000000000000000775d22a00000000000000000000000000000000000000000000000000000000070f954b200000000000000000000000000000000000000000000000000000000713494d7000000000000000000000000000000000000000000000000000000006107e605000000000000000000000000000000000000000000000000000000006107e606000000000000000000000000000000000000000000000000000000006b51e919000000000000000000000000000000000000000000000000000000006dce9150000000000000000000000000000000000000000000000000000000005fd9491d000000000000000000000000000000000000000000000000000000006049d4ad000000000000000000000000000000000000000000000000000000004e22423c00000000000000000000000000000000000000000000000000000000543a975a00000000000000000000000000000000000000000000000000000000566f878c00000000000000000000000000000000000000000000000000000000566f878d000000000000000000000000000000000000000000000000000000005873533d0000000000000000000000000000000000000000000000000000000058b8ac7d00000000000000000000000000000000000000000000000000000000543a975b0000000000000000000000000000000000000000000000000000000054ceac840000000000000000000000000000000000000000000000000000000051b31e750000000000000000000000000000000000000000000000000000000051b31e760000000000000000000000000000000000000000000000000000000052871fc80000000000000000000000000000000000000000000000000000000053bab76c000000000000000000000000000000000000000000000000000000004e22423d000000000000000000000000000000000000000000000000000000004fc3f41a000000000000000000000000000000000000000000000000000000004537e657000000000000000000000000000000000000000000000000000000004a2ae304000000000000000000000000000000000000000000000000000000004a2ae305000000000000000000000000000000000000000000000000000000004aad3ae8000000000000000000000000000000000000000000000000000000004d4e8dfa000000000000000000000000000000000000000000000000000000004537e6580000000000000000000000000000000000000000000000000000000048cd4cb10000000000000000000000000000000000000000000000000000000043b3546b0000000000000000000000000000000000000000000000000000000043b3546c0000000000000000000000000000000000000000000000000000000043e1ead1000000000000000000000000000000000000000000000000000000004529cae70000000000000000000000000000000000000000000000000000000040f5da9e0000000000000000000000000000000000000000000000000000000041a0894d000000000000000000000000000000000000000000000000000000001895143f0000000000000000000000000000000000000000000000000000000021cb217100000000000000000000000000000000000000000000000000000000372500aa000000000000000000000000000000000000000000000000000000003997dfcb000000000000000000000000000000000000000000000000000000003997dfcc000000000000000000000000000000000000000000000000000000003b135732000000000000000000000000000000000000000000000000000000003ccfd60b00000000000000000000000000000000000000000000000000000000372500ab000000000000000000000000000000000000000000000000000000003778875700000000000000000000000000000000000000000000000000000000385fa817000000000000000000000000000000000000000000000000000000002fc96ce5000000000000000000000000000000000000000000000000000000002fc96ce60000000000000000000000000000000000000000000000000000000031d7a2620000000000000000000000000000000000000000000000000000000032b4a4560000000000000000000000000000000000000000000000000000000021cb2172000000000000000000000000000000000000000000000000000000002c87d916000000000000000000000000000000000000000000000000000000001eaa3e16000000000000000000000000000000000000000000000000000000001f56b80f000000000000000000000000000000000000000000000000000000001f56b810000000000000000000000000000000000000000000000000000000001f69565f0000000000000000000000000000000000000000000000000000000020088643000000000000000000000000000000000000000000000000000000001eaa3e17000000000000000000000000000000000000000000000000000000001f435c47000000000000000000000000000000000000000000000000000000001a267cd1000000000000000000000000000000000000000000000000000000001a267cd2000000000000000000000000000000000000000000000000000000001c53c280000000000000000000000000000000000000000000000000000000001e9f829a00000000000000000000000000000000000000000000000000000000189514400000000000000000000000000000000000000000000000000000000018aa164b000000000000000000000000000000000000000000000000000000000efcb338000000000000000000000000000000000000000000000000000000001417b8290000000000000000000000000000000000000000000000000000000017026c090000000000000000000000000000000000000000000000000000000017026c0a0000000000000000000000000000000000000000000000000000000017490ba9000000000000000000000000000000000000000000000000000000001843317f000000000000000000000000000000000000000000000000000000001417b82a000000000000000000000000000000000000000000000000000000001421e1d4000000000000000000000000000000000000000000000000000000001021637c000000000000000000000000000000000000000000000000000000001021637d00000000000000000000000000000000000000000000000000000000117a5b9000000000000000000000000000000000000000000000000000000000126d9340000000000000000000000000000000000000000000000000000000000efcb339000000000000000000000000000000000000000000000000000000001017c7780000000000000000000000000000000000000000000000000000000007dd1dff00000000000000000000000000000000000000000000000000000000096c91f900000000000000000000000000000000000000000000000000000000096c91fa000000000000000000000000000000000000000000000000000000000b8909ef000000000000000000000000000000000000000000000000000000000ceb59600000000000000000000000000000000000000000000000000000000007dd1e000000000000000000000000000000000000000000000000000000000008b794e700000000000000000000000000000000000000000000000000000000025c5d3d00000000000000000000000000000000000000000000000000000000025c5d3e0000000000000000000000000000000000000000000000000000000002da2f35000000000000000000000000000000000000000000000000000000000544ce5e0000000000000000000000000000000000000000000000000000000000ec378f000000000000000000000000000000000000000000000000000000000153515c0000000000000000000000000000000000000020000004e000000000000000000000000000000000000000000000000000000000000000001feb3dd067660000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e118cdaa7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000004e000000000000000006cc23383000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000004e000000000000000000000000000000000000000000000000000000000000000000de0b6b3a76400001cc2b8522552638e6152acc111f31d4e5396f9a4a751581d68537dcf6f4df14600000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ee3bb1b78a48b2ce0060288640da9950842ea4780367a2fe0af6b4761c9961b18cd3331e32cec677d80b82cf0f71496605e7ed6ff864a3ccedc7d5d11d838c83d2ade5560000000000000000000000000000000000000000000000000000000057e844f500000000000000000000000000000000000000000000000000000000020000020000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000010000000100000000000000007d1a4339809e2309c45b2c3d3ae7b785957336f535b366f264d8c9d65aea3c447524da93786d2cb259a237259b29fcf78fbd1923c883604ff5ac97141e598ae961104228000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000020000004e00000000000000000752d7e161ff5146f80e3820893176eb40532811e5e20400dfdde57455213706a796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000517730bf0000000000000000000000000000000000000000000000000000000070a0823100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000042966c680000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000240000000000000000000000007aec95b1a46da7f6819cbab3b1d740918a034fe47396cba6652fd5185484b1d995e817cd000000000000000000000000000000000000000000000000000000007452b18600000000000000000000000000000000000000000000000000000000efa011d500000000000000000000000000000000000000000000000000000000cee9b78f00000000000000000000000000000000000000000000000000000000a1622d2d391ece03b4a798b73fb4d2aa45cefc41205f7426e6eb04733098c70cc086a0a000000000000000000000000000000000000000000000000000000000ae742ced00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffff9bfc977e4246711263276590ad3bcd511fa76a49dcd5c41042b9f03fb99d096db0ba9059cbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000004e000000000000000000000000000000000000000000000000000000000000000000000000018fb5864000000000000000000000000000000000000000000000000ffffffffffffffdf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000fffffffffffffe9f0000000000000000000000000000000000000000000000fbb67fda52d4bfb8bf8b516ed80000000000000000000000000000000000000000000000000000000056ca98a00000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000800000000000000000000000005f162697a29f94fb93662242fd841378e747f71e4d9b781693b770f2244a3868de3c4dbf00000000000000000000000000000000000000000000000000000000a81a164b00000000000000000000000000000000000000000000000000000000ef5a42d10000000000000000000000000000000000000000000000000000000031d01a3600000000000000000000000000000000000000000000000000000000f964efd392087d81c7d679024f52c11f9e442f96bed086771a0b85b508ed71692b5ee91900000000000000000000000000000000000000000000000000000000a034b53ecc024053ea8cdea7fe493ff3768b1f24f1699aecf30a50cff93c99dd0e9a0e360000000000000000000000000000000000000000000000000000000035d9a1cf000000000000000000000000000000000000000000000000000000000b2bde1c478a4629ca4b4f25a77f05e615351f258a7a67cc399a7a799ecad8b9000000000000000000000000000000000000000000000000fffffffffffffb1f000000000000000000000000000000000000000000000000fffffffffffffa9f000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000003fffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff5f08c379a000000000000000000000000000000000000000000000000000000000496e76616c69642072616e6765000000000000000000000000000000000000000000000000000000000000000000000000000064000004e00000000000000000456e6420696e646578206f7574206f6620626f756e6473000000000000000000e615ca6a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fbb67fda52d4bfb8be02000000000000000000000000000000000000a000000000000000000000000003f3ea8cf1b30f87d0c0e16e19ea4e3ceb14bf4efeb3973cff269c03e49323a73bf84811000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff00002397e6a60000000000000000000000000000000000000000000000000000000045f07b52000000000000000000000000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000b871373000000000000000000000000000000000000000000000000000000000f73976930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5a267f100000000000000000000000000000000000000040000001c00000000000000000200000000000000000000000000000000000060000000000000000000000000e3cc23cf18d34bc4abe0cb0b255fb24ffeee0fb74a502a2dfafaf10bc3f1705e368e6a900000000000000000000000000000000000000000000000000000000019457468657265756d205369676e6564204d6573736167653a0a333200000000020000000000000000000000000000000000003c000000000000000000000000fce698f7000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a00000000000000000000000000000000000000080000000000000000000000000f645eedf00000000000000000000000000000000000000000000000000000000d78bce0c00000000000000000000000000000000000000000000000000000000f5dee20000000000000000000000000000000000000000000000000000000000f9629e86424f271ffe9e178188cf68b80b46532399eb93c6798d7d4095d807e125beec340000000000000000000000000000000000000000000000000000000051e0f3ba00000000000000000000000000000000000000000000000000000000c456e1e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffff8ff42cbb15ccdc3cad6266b0e7a08c0454b23bf29dc2df74b6f3c209e9336465bd10000000000000000000000000000000000000000000000000000000040163fff0000000000000000000000000000000000000000000000000000000000401640734b15f7bfa3e3e69a735ce82ce238daadf3893402adb5ea81f1d1f021493c936d0ef31fcddf8993a6f3195a744ef1e2ca39090ffd1480fcf387560d90f9b89000000000000000000000000000000000000000c0000004e000000000000000008eab0b6cab2ddde60261fa9e30feafd11deb779ab2e6599dbfe9f3b0aba1ac10000000000000000000000000000000000000000000000000fffffffffffffa7fc47d342b9ee3183023b1387511eb15dd04a5b08318f5fc7bb78ba62451f946a200000000000000000000000000000000000000000000000000000000ad251c27000000000000000000000000000000000000000000000000fffffffffffffd1f000000000000000000000000000000000000000000000000002386f26fc10000fffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000fffffffffffffffffffffffffffffffffffffffffffffffff21f494c589bffff000000000000000000000000000000000000000000000000000000000f454d3f000000000000000000000000000000000000000000000000fffffffffffffedf6fe0b7720000000000000000000000000000000000000000000000000000000046756e6769626c650000000000000000000000000000000000000000000000004e46540000000000000000000000000000000000000000000000000000000000db44647ba57a9b116dee5e1a12dc6c6584786c6fff71feb87de1d482b2db87241f128702000000000000000000000000000000000000000000000000000000005c91593100000000000000000000000000000000000000000000000000000000c1ab6dc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000004e00000000000000000d0011c99000000000000000000000000000000000000000000000000000000002599fa05937dc1fc3b606aef7dd96ad497042e39199d90d78ba058da2ff8ebd1ceea21b600000000000000000000000000000000000000000000000000000000acb0dc030000000000000000000000000000000000000000000000000000000056056fad000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000de27b08b0000000000000000000000000000000000000000000000000000000093c5e721000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a764000158d620b30000000000000000000000000000000000000000000000000000000008e7b4ebd0fd759d2c3a6490c110709220df82b941a8293e768c40a31caf153302000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000044000000000000000000000000515d3e81000000000000000000000000000000000000000000000000000000004544ee80000000000000000000000000000000000000000000000000000000007ef235640000000000000000000000000000000000000000000000000000000000a3097100000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5cff65a4ce6801e7105c655f88b2757b31e367fcd34299dd082bff110594e6ae3a196396c1a600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffff83f693974f7e8fb04993563030db38816158600a512d4ae2c8bd7bb63299b32fa4080379f8000000000000000000000000000000000000000000000000000000000e2d6893dd6d326645ed009f1f4387f9df2bf9371b1e3abb6ac0a4bfea2d0c3b85176d5877dea778deb350a8281e30b2bde2239a94cd88a916e6da0719401750b940aba73000000000000000000000000000000000000000000000000000000001f2d0878d96e7f5e2e8a6266e1356244403aac7cc4752acf92bc9ae46a90e830da4b17fe00000000000000000000000000000000000000000000000000000000c470a6f7000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39750b219c00000000000000000000000000000000000000000000000000000000c991cbb1000000000000000000000000000000000000000000000000000000007a81d7b51344069f7821dfdddc1455c225b19675c096d70b59eb4a92b1a5cd369f6b4c70ebae13708b2662e90fec3fe4dd9077493a807e71a2b72a2fd125e529a3ee01fd00000000000000000000000000000000000000000000000000000000e89435a800000000000000000000000000000000000000000000000000000000436c61696d73206172652070617573656420666f72206d6967726174696f6e000000000000000000000000000000000000000000000000000eb5e06245ea0000000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000bac65e5b40c10f1900000000000000000000000000000000000000000000000000000000fc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe0df723dc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000004e00000000000000000602fe2ca00000000000000000000000000000000000000000000000000000000f556186d00000000000000000000000000000000000000000000000000000000f26c0af99aa6aca8ba7ebc94b8b2519bca2ee06ad37f2c4b6956c7b67e6c4357e514c52400000000000000000000000000000000000000000000000000000000d7c141a400000000000000000000000000000000000000000000000000000000c8230a8100000000000000000000000000000000000000000000000000000000bb69c44f000000000000000000000000000000000000000000000000000000004e23d03500000000000000000000000000000000000000000000000000000000af701e3e58377c6ab088ede01e752fc4dfea7bc048647d5c0c87d99ad80d012d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffedffdfffffffffffffffffffffffffffffffffffee000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefffdffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000080000004e000000000000000006fa93840635aedefce531fcdcedaa360348c37508cffa09df50ad25437a53645a0ea5e1200000000000000000000000000000000000000000000000000000000e6aa5b9b00000000000000000000000000000000000000000000000000000000537461727420696e646578206f7574206f6620626f756e6473000000000000006856b2698bb023cb1af6a11ac2722f6add1796ca15de1baf38c1632a154f411d4fa4f975bed172e57418d27fbcf15db00f58d9325e3ca03404caf4bac5cab5bcaf68cf5892b0bbe769042addda11ea019426da8182d64597b6573e50366e90f8554fb1d900000000000000000000000000000000000000000000000000000000436f6e74726163742069732070617573656420666f72206d6967726174696f6eea1b9a1c0000000000000000000000000000000000000000000000000000000044222691a771316545847e0d5d5dcab8b04696169d6234f9ada4aabeb74129c5a33543dddbb1877eb9e325a6a9672dacbe56da408afd19a6ea9365aadfb625e1b223a1c800000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffde0000000000000000000000000000000000000000000000000ffffffffffffff60c9f3651d40236984bdb5c6072ba945d57db4b844367cf18844ed4e2d1faf79d70469adb04fc1fdf457bf17d06b22f1f49b2e23188f2cca2a31044f2d84460ceebdc4bb1651282c5a579c9dfbdf20757232f7cf1fe5450fdc8644e761791ec3f0f167eb32cf692c4f21f2ae17fcd09d3df7e0bdad1a4c35d8f6488e731db66da80000000000000000000000000000000000000000000000010000000000000000daae9aa758637a0d349f036f099afd70aa88d8ac63fce096321de512ffebc16c79c9e5ee49f0581a3c3f9b7e3033675c37fdb34e256fb9192fd17cd1a53f119dc6f32ef58dadbe625583476512d5506b456572482b62fc5df02ecea6c4ec80210200000200000000000000000000000000000000000000000000000000000000f4b0052ebc34bf64ecadf003b4c12b10f55565795360016e76c7486f00991e4f

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.