60806040523480156200001157600080fd5b5060405162002abb38038062002abb833981810160405281019062000037919062000348565b33828281600090816200004b919062000618565b5080600190816200005d919062000618565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000d55760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000cc919062000744565b60405180910390fd5b620000e681620000ef60201b60201c565b50505062000761565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200021e82620001d3565b810181811067ffffffffffffffff8211171562000240576200023f620001e4565b5b80604052505050565b600062000255620001b5565b905062000263828262000213565b919050565b600067ffffffffffffffff821115620002865762000285620001e4565b5b6200029182620001d3565b9050602081019050919050565b60005b83811015620002be578082015181840152602081019050620002a1565b60008484015250505050565b6000620002e1620002db8462000268565b62000249565b9050828152602081018484840111156200030057620002ff620001ce565b5b6200030d8482856200029e565b509392505050565b600082601f8301126200032d576200032c620001c9565b5b81516200033f848260208601620002ca565b91505092915050565b60008060408385031215620003625762000361620001bf565b5b600083015167ffffffffffffffff811115620003835762000382620001c4565b5b620003918582860162000315565b925050602083015167ffffffffffffffff811115620003b557620003b4620001c4565b5b620003c38582860162000315565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042057607f821691505b602082108103620004365762000435620003d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000461565b620004ac868362000461565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004f9620004f3620004ed84620004c4565b620004ce565b620004c4565b9050919050565b6000819050919050565b6200051583620004d8565b6200052d620005248262000500565b8484546200046e565b825550505050565b600090565b6200054462000535565b620005518184846200050a565b505050565b5b8181101562000579576200056d6000826200053a565b60018101905062000557565b5050565b601f821115620005c85762000592816200043c565b6200059d8462000451565b81016020851015620005ad578190505b620005c5620005bc8562000451565b83018262000556565b50505b505050565b600082821c905092915050565b6000620005ed60001984600802620005cd565b1980831691505092915050565b6000620006088383620005da565b9150826002028217905092915050565b6200062382620003cd565b67ffffffffffffffff8111156200063f576200063e620001e4565b5b6200064b825462000407565b620006588282856200057d565b600060209050601f8311600181146200069057600084156200067b578287015190505b620006878582620005fa565b865550620006f7565b601f198416620006a0866200043c565b60005b82811015620006ca57848901518255600182019150602085019450602081019050620006a3565b86831015620006ea5784890151620006e6601f891682620005da565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200072c82620006ff565b9050919050565b6200073e816200071f565b82525050565b60006020820190506200075b600083018462000733565b92915050565b61234a80620007716000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638da5cb5b116100ad578063b88d4fde11610071578063b88d4fde14610308578063c42cd88914610324578063c87b56dd14610340578063e985e9c514610370578063f2fde38b146103a057610121565b80638da5cb5b1461026257806395d89b4114610280578063a22cb4651461029e578063b510391f146102ba578063b7a4fcb1146102ea57610121565b806323b872dd116100f457806323b872dd146101c057806342842e0e146101dc5780636352211e146101f857806370a0823114610228578063715018a61461025857610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190611866565b6103bc565b60405161014d91906118ae565b60405180910390f35b61015e61049e565b60405161016b9190611959565b60405180910390f35b61018e600480360381019061018991906119b1565b610530565b60405161019b9190611a1f565b60405180910390f35b6101be60048036038101906101b99190611a66565b61054c565b005b6101da60048036038101906101d59190611aa6565b610562565b005b6101f660048036038101906101f19190611aa6565b610664565b005b610212600480360381019061020d91906119b1565b610684565b60405161021f9190611a1f565b60405180910390f35b610242600480360381019061023d9190611af9565b610696565b60405161024f9190611b35565b60405180910390f35b610260610750565b005b61026a610764565b6040516102779190611a1f565b60405180910390f35b61028861078e565b6040516102959190611959565b60405180910390f35b6102b860048036038101906102b39190611b7c565b610820565b005b6102d460048036038101906102cf9190611cf1565b610836565b6040516102e19190611b35565b60405180910390f35b6102f261091c565b6040516102ff9190611a1f565b60405180910390f35b610322600480360381019061031d9190611d4d565b610942565b005b61033e60048036038101906103399190611af9565b61095f565b005b61035a600480360381019061035591906119b1565b6109ab565b6040516103679190611959565b60405180910390f35b61038a60048036038101906103859190611dd0565b610a50565b60405161039791906118ae565b60405180910390f35b6103ba60048036038101906103b59190611af9565b610ae4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610497575061049682610b6a565b5b9050919050565b6060600080546104ad90611e3f565b80601f01602080910402602001604051908101604052809291908181526020018280546104d990611e3f565b80156105265780601f106104fb57610100808354040283529160200191610526565b820191906000526020600020905b81548152906001019060200180831161050957829003601f168201915b5050505050905090565b600061053b82610bd4565b5061054582610c5c565b9050919050565b61055e8282610559610c99565b610ca1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105d45760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105cb9190611a1f565b60405180910390fd5b60006105e883836105e3610c99565b610cb3565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461065e578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161065593929190611e70565b60405180910390fd5b50505050565b61067f83838360405180602001604052806000815250610942565b505050565b600061068f82610bd4565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107095760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016107009190611a1f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610758610ecd565b6107626000610f54565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461079d90611e3f565b80601f01602080910402602001604051908101604052809291908181526020018280546107c990611e3f565b80156108165780601f106107eb57610100808354040283529160200191610816565b820191906000526020600020905b8154815290600101906020018083116107f957829003601f168201915b5050505050905090565b61083261082b610c99565b838361101a565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90611ef3565b60405180910390fd5b600760008154809291906108db90611f42565b9190505550600060075490506108f18482611189565b826009600083815260200190815260200160002090816109119190612136565b508091505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61094d848484610562565b610959848484846111a7565b50505050565b610967610ecd565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606009600083815260200190815260200160002080546109cb90611e3f565b80601f01602080910402602001604051908101604052809291908181526020018280546109f790611e3f565b8015610a445780601f10610a1957610100808354040283529160200191610a44565b820191906000526020600020905b815481529060010190602001808311610a2757829003601f168201915b50505050509050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610aec610ecd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b5e5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b559190611a1f565b60405180910390fd5b610b6781610f54565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610be08361135e565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c5357826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610c4a9190611b35565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610cae838383600161139b565b505050565b600080610cbf8461135e565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610d0157610d00818486611560565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d9257610d4360008560008061139b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610e15576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610ed5610c99565b73ffffffffffffffffffffffffffffffffffffffff16610ef3610764565b73ffffffffffffffffffffffffffffffffffffffff1614610f5257610f16610c99565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f499190611a1f565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361108b57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016110829190611a1f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161117c91906118ae565b60405180910390a3505050565b6111a3828260405180602001604052806000815250611624565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611358578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026111eb610c99565b8685856040518563ffffffff1660e01b815260040161120d949392919061225d565b6020604051808303816000875af192505050801561124957506040513d601f19601f8201168201806040525081019061124691906122be565b60015b6112cd573d8060008114611279576040519150601f19603f3d011682016040523d82523d6000602084013e61127e565b606091505b5060008151036112c557836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112bc9190611a1f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461135657836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161134d9190611a1f565b60405180910390fd5b505b50505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806113d45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115085760006113e484610bd4565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561144f57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561146257506114608184610a50565b155b156114a457826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161149b9190611a1f565b60405180910390fd5b811561150657838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61156b838383611640565b61161f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115e057806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016115d79190611b35565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016116169291906122eb565b60405180910390fd5b505050565b61162e8383611701565b61163b60008484846111a7565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116f857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116b957506116b88484610a50565b5b806116f757508273ffffffffffffffffffffffffffffffffffffffff166116df83610c5c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117735760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161176a9190611a1f565b60405180910390fd5b600061178183836000610cb3565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146117f55760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016117ec9190611a1f565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118438161180e565b811461184e57600080fd5b50565b6000813590506118608161183a565b92915050565b60006020828403121561187c5761187b611804565b5b600061188a84828501611851565b91505092915050565b60008115159050919050565b6118a881611893565b82525050565b60006020820190506118c3600083018461189f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119035780820151818401526020810190506118e8565b60008484015250505050565b6000601f19601f8301169050919050565b600061192b826118c9565b61193581856118d4565b93506119458185602086016118e5565b61194e8161190f565b840191505092915050565b600060208201905081810360008301526119738184611920565b905092915050565b6000819050919050565b61198e8161197b565b811461199957600080fd5b50565b6000813590506119ab81611985565b92915050565b6000602082840312156119c7576119c6611804565b5b60006119d58482850161199c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a09826119de565b9050919050565b611a19816119fe565b82525050565b6000602082019050611a346000830184611a10565b92915050565b611a43816119fe565b8114611a4e57600080fd5b50565b600081359050611a6081611a3a565b92915050565b60008060408385031215611a7d57611a7c611804565b5b6000611a8b85828601611a51565b9250506020611a9c8582860161199c565b9150509250929050565b600080600060608486031215611abf57611abe611804565b5b6000611acd86828701611a51565b9350506020611ade86828701611a51565b9250506040611aef8682870161199c565b9150509250925092565b600060208284031215611b0f57611b0e611804565b5b6000611b1d84828501611a51565b91505092915050565b611b2f8161197b565b82525050565b6000602082019050611b4a6000830184611b26565b92915050565b611b5981611893565b8114611b6457600080fd5b50565b600081359050611b7681611b50565b92915050565b60008060408385031215611b9357611b92611804565b5b6000611ba185828601611a51565b9250506020611bb285828601611b67565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611bfe8261190f565b810181811067ffffffffffffffff82111715611c1d57611c1c611bc6565b5b80604052505050565b6000611c306117fa565b9050611c3c8282611bf5565b919050565b600067ffffffffffffffff821115611c5c57611c5b611bc6565b5b611c658261190f565b9050602081019050919050565b82818337600083830152505050565b6000611c94611c8f84611c41565b611c26565b905082815260208101848484011115611cb057611caf611bc1565b5b611cbb848285611c72565b509392505050565b600082601f830112611cd857611cd7611bbc565b5b8135611ce8848260208601611c81565b91505092915050565b60008060408385031215611d0857611d07611804565b5b6000611d1685828601611a51565b925050602083013567ffffffffffffffff811115611d3757611d36611809565b5b611d4385828601611cc3565b9150509250929050565b60008060008060808587031215611d6757611d66611804565b5b6000611d7587828801611a51565b9450506020611d8687828801611a51565b9350506040611d978782880161199c565b925050606085013567ffffffffffffffff811115611db857611db7611809565b5b611dc487828801611cc3565b91505092959194509250565b60008060408385031215611de757611de6611804565b5b6000611df585828601611a51565b9250506020611e0685828601611a51565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e5757607f821691505b602082108103611e6a57611e69611e10565b5b50919050565b6000606082019050611e856000830186611a10565b611e926020830185611b26565b611e9f6040830184611a10565b949350505050565b7f4f6e6c792054697052656c61792063616e206d696e7400000000000000000000600082015250565b6000611edd6016836118d4565b9150611ee882611ea7565b602082019050919050565b60006020820190508181036000830152611f0c81611ed0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f4d8261197b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f7f57611f7e611f13565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611fec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611faf565b611ff68683611faf565b95508019841693508086168417925050509392505050565b6000819050919050565b600061203361202e6120298461197b565b61200e565b61197b565b9050919050565b6000819050919050565b61204d83612018565b6120616120598261203a565b848454611fbc565b825550505050565b600090565b612076612069565b612081818484612044565b505050565b5b818110156120a55761209a60008261206e565b600181019050612087565b5050565b601f8211156120ea576120bb81611f8a565b6120c484611f9f565b810160208510156120d3578190505b6120e76120df85611f9f565b830182612086565b50505b505050565b600082821c905092915050565b600061210d600019846008026120ef565b1980831691505092915050565b600061212683836120fc565b9150826002028217905092915050565b61213f826118c9565b67ffffffffffffffff81111561215857612157611bc6565b5b6121628254611e3f565b61216d8282856120a9565b600060209050601f8311600181146121a0576000841561218e578287015190505b612198858261211a565b865550612200565b601f1984166121ae86611f8a565b60005b828110156121d6578489015182556001820191506020850194506020810190506121b1565b868310156121f357848901516121ef601f8916826120fc565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b600061222f82612208565b6122398185612213565b93506122498185602086016118e5565b6122528161190f565b840191505092915050565b60006080820190506122726000830187611a10565b61227f6020830186611a10565b61228c6040830185611b26565b818103606083015261229e8184612224565b905095945050505050565b6000815190506122b88161183a565b92915050565b6000602082840312156122d4576122d3611804565b5b60006122e2848285016122a9565b91505092915050565b60006040820190506123006000830185611a10565b61230d6020830184611b26565b939250505056fea2646970667358221220dbf5108bcf3f96353a6c63236d2b7788fc0bbfcca9683d470daa38c5607196f964736f6c634300081600330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000095265776172644e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004524e465400000000000000000000000000000000000000000000000000000000