0x60806040523480156200001157600080fd5b506040516200292d3803806200292d8339818101604052810190620000379190620002a3565b806040518060400160405280600981526020017f54657374206e66747300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f544e4654530000000000000000000000000000000000000000000000000000008152508160009081620000b591906200054f565b508060019081620000c791906200054f565b5050506000600660006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200015a5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000151919062000647565b60405180910390fd5b6200016b816200017360201b60201c565b505062000664565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200026b826200023e565b9050919050565b6200027d816200025e565b81146200028957600080fd5b50565b6000815190506200029d8162000272565b92915050565b600060208284031215620002bc57620002bb62000239565b5b6000620002cc848285016200028c565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200035757607f821691505b6020821081036200036d576200036c6200030f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000398565b620003e3868362000398565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004306200042a6200042484620003fb565b62000405565b620003fb565b9050919050565b6000819050919050565b6200044c836200040f565b620004646200045b8262000437565b848454620003a5565b825550505050565b600090565b6200047b6200046c565b6200048881848462000441565b505050565b5b81811015620004b057620004a460008262000471565b6001810190506200048e565b5050565b601f821115620004ff57620004c98162000373565b620004d48462000388565b81016020851015620004e4578190505b620004fc620004f38562000388565b8301826200048d565b50505b505050565b600082821c905092915050565b6000620005246000198460080262000504565b1980831691505092915050565b60006200053f838362000511565b9150826002028217905092915050565b6200055a82620002d5565b67ffffffffffffffff811115620005765762000575620002e0565b5b6200058282546200033e565b6200058f828285620004b4565b600060209050601f831160018114620005c75760008415620005b2578287015190505b620005be858262000531565b8655506200062e565b601f198416620005d78662000373565b60005b828110156200060157848901518255600182019150602085019450602081019050620005da565b868310156200062157848901516200061d601f89168262000511565b8355505b6001600288020188555050505b505050505050565b62000641816200025e565b82525050565b60006020820190506200065e600083018462000636565b92915050565b6122b980620006746000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a14481941161007c578063a144819414610302578063a22cb4651461031e578063b88d4fde1461033a578063c87b56dd14610356578063e985e9c514610386578063f2fde38b146103b657610137565b806370a0823114610282578063715018a6146102b25780638456cb59146102bc5780638da5cb5b146102c657806395d89b41146102e457610137565b80633f4ba83a116100ff5780633f4ba83a146101f257806342842e0e146101fc57806342966c68146102185780635c975abb146102345780636352211e1461025257610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806323b872dd146101d6575b600080fd5b61015660048036038101906101519190611b03565b6103d2565b6040516101639190611b4b565b60405180910390f35b6101746104b4565b6040516101819190611bf6565b60405180910390f35b6101a4600480360381019061019f9190611c4e565b610546565b6040516101b19190611cbc565b60405180910390f35b6101d460048036038101906101cf9190611d03565b610562565b005b6101f060048036038101906101eb9190611d43565b610578565b005b6101fa61067a565b005b61021660048036038101906102119190611d43565b61068c565b005b610232600480360381019061022d9190611c4e565b6106ac565b005b61023c6106c3565b6040516102499190611b4b565b60405180910390f35b61026c60048036038101906102679190611c4e565b6106da565b6040516102799190611cbc565b60405180910390f35b61029c60048036038101906102979190611d96565b6106ec565b6040516102a99190611dd2565b60405180910390f35b6102ba6107a6565b005b6102c46107ba565b005b6102ce6107cc565b6040516102db9190611cbc565b60405180910390f35b6102ec6107f6565b6040516102f99190611bf6565b60405180910390f35b61031c60048036038101906103179190611d03565b610888565b005b61033860048036038101906103339190611e19565b61089e565b005b610354600480360381019061034f9190611f8e565b6108b4565b005b610370600480360381019061036b9190611c4e565b6108d1565b60405161037d9190611bf6565b60405180910390f35b6103a0600480360381019061039b9190612011565b61093a565b6040516103ad9190611b4b565b60405180910390f35b6103d060048036038101906103cb9190611d96565b6109ce565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104ad57506104ac82610a54565b5b9050919050565b6060600080546104c390612080565b80601f01602080910402602001604051908101604052809291908181526020018280546104ef90612080565b801561053c5780601f106105115761010080835404028352916020019161053c565b820191906000526020600020905b81548152906001019060200180831161051f57829003601f168201915b5050505050905090565b600061055182610abe565b5061055b82610b46565b9050919050565b610574828261056f610b83565b610b8b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105ea5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105e19190611cbc565b60405180910390fd5b60006105fe83836105f9610b83565b610b9d565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610674578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161066b939291906120b1565b60405180910390fd5b50505050565b610682610bb3565b61068a610c3a565b565b6106a7838383604051806020016040528060008152506108b4565b505050565b6106bf6000826106ba610b83565b610b9d565b5050565b6000600660009054906101000a900460ff16905090565b60006106e582610abe565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361075f5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016107569190611cbc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107ae610bb3565b6107b86000610c9d565b565b6107c2610bb3565b6107ca610d63565b565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461080590612080565b80601f016020809104026020016040519081016040528092919081815260200182805461083190612080565b801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b5050505050905090565b610890610bb3565b61089a8282610dc6565b5050565b6108b06108a9610b83565b8383610de4565b5050565b6108bf848484610578565b6108cb84848484610f53565b50505050565b60606108dc82610abe565b5060006108e761110a565b905060008151116109075760405180602001604052806000815250610932565b8061091184611121565b604051602001610922929190612124565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6109d6610bb3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a485760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a3f9190611cbc565b60405180910390fd5b610a5181610c9d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610aca836111ef565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b3d57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610b349190611dd2565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610b98838383600161122c565b505050565b6000610baa8484846113f1565b90509392505050565b610bbb610b83565b73ffffffffffffffffffffffffffffffffffffffff16610bd96107cc565b73ffffffffffffffffffffffffffffffffffffffff1614610c3857610bfc610b83565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c2f9190611cbc565b60405180910390fd5b565b610c4261140f565b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610c86610b83565b604051610c939190611cbc565b60405180910390a1565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610d6b61144f565b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610daf610b83565b604051610dbc9190611cbc565b60405180910390a1565b610de0828260405180602001604052806000815250611490565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e5557816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610e4c9190611cbc565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f469190611b4b565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611104578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02610f97610b83565b8685856040518563ffffffff1660e01b8152600401610fb9949392919061219d565b6020604051808303816000875af1925050508015610ff557506040513d601f19601f82011682018060405250810190610ff291906121fe565b60015b611079573d8060008114611025576040519150601f19603f3d011682016040523d82523d6000602084013e61102a565b606091505b50600081510361107157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016110689190611cbc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461110257836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016110f99190611cbc565b60405180910390fd5b505b50505050565b606060405180602001604052806000815250905090565b606060006001611130846114ac565b01905060008167ffffffffffffffff81111561114f5761114e611e63565b5b6040519080825280601f01601f1916602001820160405280156111815781602001600182028036833780820191505090505b509050600082602001820190505b6001156111e4578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816111d8576111d761222b565b5b0494506000850361118f575b819350505050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806112655750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561139957600061127584610abe565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112e057508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156112f357506112f1818461093a565b155b1561133557826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161132c9190611cbc565b60405180910390fd5b811561139757838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60006113fb61144f565b6114068484846115ff565b90509392505050565b6114176106c3565b61144d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114576106c3565b1561148e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61149a8383611819565b6114a76000848484610f53565b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061150a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611500576114ff61222b565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611547576d04ee2d6d415b85acef8100000000838161153d5761153c61222b565b5b0492506020810190505b662386f26fc10000831061157657662386f26fc10000838161156c5761156b61222b565b5b0492506010810190505b6305f5e100831061159f576305f5e10083816115955761159461222b565b5b0492506008810190505b61271083106115c45761271083816115ba576115b961222b565b5b0492506004810190505b606483106115e757606483816115dd576115dc61222b565b5b0492506002810190505b600a83106115f6576001810190505b80915050919050565b60008061160b846111ef565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461164d5761164c818486611912565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116de5761168f60008560008061122c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611761576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361188b5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118829190611cbc565b60405180910390fd5b600061189983836000610b9d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461190d5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016119049190611cbc565b60405180910390fd5b505050565b61191d8383836119d6565b6119d157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361199257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016119899190611dd2565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016119c892919061225a565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a8e57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a4f5750611a4e848461093a565b5b80611a8d57508273ffffffffffffffffffffffffffffffffffffffff16611a7583610b46565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ae081611aab565b8114611aeb57600080fd5b50565b600081359050611afd81611ad7565b92915050565b600060208284031215611b1957611b18611aa1565b5b6000611b2784828501611aee565b91505092915050565b60008115159050919050565b611b4581611b30565b82525050565b6000602082019050611b606000830184611b3c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ba0578082015181840152602081019050611b85565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bc882611b66565b611bd28185611b71565b9350611be2818560208601611b82565b611beb81611bac565b840191505092915050565b60006020820190508181036000830152611c108184611bbd565b905092915050565b6000819050919050565b611c2b81611c18565b8114611c3657600080fd5b50565b600081359050611c4881611c22565b92915050565b600060208284031215611c6457611c63611aa1565b5b6000611c7284828501611c39565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ca682611c7b565b9050919050565b611cb681611c9b565b82525050565b6000602082019050611cd16000830184611cad565b92915050565b611ce081611c9b565b8114611ceb57600080fd5b50565b600081359050611cfd81611cd7565b92915050565b60008060408385031215611d1a57611d19611aa1565b5b6000611d2885828601611cee565b9250506020611d3985828601611c39565b9150509250929050565b600080600060608486031215611d5c57611d5b611aa1565b5b6000611d6a86828701611cee565b9350506020611d7b86828701611cee565b9250506040611d8c86828701611c39565b9150509250925092565b600060208284031215611dac57611dab611aa1565b5b6000611dba84828501611cee565b91505092915050565b611dcc81611c18565b82525050565b6000602082019050611de76000830184611dc3565b92915050565b611df681611b30565b8114611e0157600080fd5b50565b600081359050611e1381611ded565b92915050565b60008060408385031215611e3057611e2f611aa1565b5b6000611e3e85828601611cee565b9250506020611e4f85828601611e04565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e9b82611bac565b810181811067ffffffffffffffff82111715611eba57611eb9611e63565b5b80604052505050565b6000611ecd611a97565b9050611ed98282611e92565b919050565b600067ffffffffffffffff821115611ef957611ef8611e63565b5b611f0282611bac565b9050602081019050919050565b82818337600083830152505050565b6000611f31611f2c84611ede565b611ec3565b905082815260208101848484011115611f4d57611f4c611e5e565b5b611f58848285611f0f565b509392505050565b600082601f830112611f7557611f74611e59565b5b8135611f85848260208601611f1e565b91505092915050565b60008060008060808587031215611fa857611fa7611aa1565b5b6000611fb687828801611cee565b9450506020611fc787828801611cee565b9350506040611fd887828801611c39565b925050606085013567ffffffffffffffff811115611ff957611ff8611aa6565b5b61200587828801611f60565b91505092959194509250565b6000806040838503121561202857612027611aa1565b5b600061203685828601611cee565b925050602061204785828601611cee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061209857607f821691505b6020821081036120ab576120aa612051565b5b50919050565b60006060820190506120c66000830186611cad565b6120d36020830185611dc3565b6120e06040830184611cad565b949350505050565b600081905092915050565b60006120fe82611b66565b61210881856120e8565b9350612118818560208601611b82565b80840191505092915050565b600061213082856120f3565b915061213c82846120f3565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061216f82612148565b6121798185612153565b9350612189818560208601611b82565b61219281611bac565b840191505092915050565b60006080820190506121b26000830187611cad565b6121bf6020830186611cad565b6121cc6040830185611dc3565b81810360608301526121de8184612164565b905095945050505050565b6000815190506121f881611ad7565b92915050565b60006020828403121561221457612213611aa1565b5b6000612222848285016121e9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060408201905061226f6000830185611cad565b61227c6020830184611dc3565b939250505056fea264697066735822122015880a12bfcf78a55aa734f7e7051f1748f8b1095a4fcb35532281acabea472864736f6c6343000813003300000000000000000000000008aad5711d0b5f7caee0c95b9178d1a7c796a1a7