60806040526000600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600681526020017f5572616e757300000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f55524e5300000000000000000000000000000000000000000000000000000000815250620000b9620000ad6200013460201b60201c565b6200013c60201b60201c565b8160059080519060200190620000d1929190620004c7565b508060069080519060200190620000ea929190620004c7565b5050506200012e33620001026200020060201b60201c565b600a62000110919062000711565b64e8d4a5100062000122919062000762565b6200020960201b60201c565b62000982565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200027c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002739062000824565b60405180910390fd5b6200029060008383620003bb60201b60201c565b8060046000828254620002a4919062000846565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550630f3eae65640997e6e50902673398bc1d25f112ed64085774394d02028060005260016020526040600020720fffffffffffffffffffffffffffffffffffff815550508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200039b9190620008b4565b60405180910390a3620003b760008383620003c060201b60201c565b5050565b505050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680620004625750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15620004c25760011515600760009054906101000a900460ff16151514620004c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b890620008fb565b60405180910390fd5b5b505050565b828054620004d5906200094c565b90600052602060002090601f016020900481019282620004f9576000855562000545565b82601f106200051457805160ff191683800117855562000545565b8280016001018555821562000545579182015b828111156200054457825182559160200191906001019062000527565b5b50905062000554919062000558565b5090565b5b808211156200057357600081600090555060010162000559565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200060557808604811115620005dd57620005dc62000577565b5b6001851615620005ed5780820291505b8081029050620005fd85620005a6565b9450620005bd565b94509492505050565b600082620006205760019050620006f3565b81620006305760009050620006f3565b816001811462000649576002811462000654576200068a565b6001915050620006f3565b60ff84111562000669576200066862000577565b5b8360020a91508482111562000683576200068262000577565b5b50620006f3565b5060208310610133831016604e8410600b8410161715620006c45782820a905083811115620006be57620006bd62000577565b5b620006f3565b620006d38484846001620005b3565b92509050818404811115620006ed57620006ec62000577565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200071e82620006fa565b91506200072b8362000704565b92506200075a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200060e565b905092915050565b60006200076f82620006fa565b91506200077c83620006fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007b857620007b762000577565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200080c601f83620007c3565b91506200081982620007d4565b602082019050919050565b600060208201905081810360008301526200083f81620007fd565b9050919050565b60006200085382620006fa565b91506200086083620006fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000898576200089762000577565b5b828201905092915050565b620008ae81620006fa565b82525050565b6000602082019050620008cb6000830184620008a3565b92915050565b50565b6000620008e3600083620007c3565b9150620008f082620008d1565b600082019050919050565b600060208201905081810360008301526200091681620008d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200096557607f821691505b602082108114156200097c576200097b6200091d565b5b50919050565b611fab80620009926000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad57806397541e9f1161007157806397541e9f14610331578063a457c2d71461034d578063a9059cbb1461037d578063dd62ed3e146103ad578063f2fde38b146103dd5761012c565b8063715018a6146102b357806373ed6b13146102bd5780638da5cb5b146102d957806395d89b41146102f7578063963e1e54146103155761012c565b806332a0e002116100f457806332a0e002146101eb578063395093511461021b5780634bf894411461024b578063618a2f5e1461026757806370a08231146102835761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b6101396103f9565b6040516101469190611471565b60405180910390f35b61016960048036038101906101649190611531565b61048b565b604051610176919061158c565b60405180910390f35b6101876104ae565b60405161019491906115b6565b60405180910390f35b6101b760048036038101906101b291906115d1565b6104b8565b6040516101c4919061158c565b60405180910390f35b6101d56104e7565b6040516101e29190611640565b60405180910390f35b6102056004803603810190610200919061165b565b6104f0565b604051610212919061158c565b60405180910390f35b61023560048036038101906102309190611531565b610546565b604051610242919061158c565b60405180910390f35b610265600480360381019061026091906116ed565b61057d565b005b610281600480360381019061027c919061173a565b61062a565b005b61029d6004803603810190610298919061165b565b610794565b6040516102aa91906115b6565b60405180910390f35b6102bb6107dd565b005b6102d760048036038101906102d2919061173a565b6107f1565b005b6102e161095c565b6040516102ee91906117d1565b60405180910390f35b6102ff610985565b60405161030c9190611471565b60405180910390f35b61032f600480360381019061032a91906116ed565b610a17565b005b61034b6004803603810190610346919061165b565b610ac4565b005b61036760048036038101906103629190611531565b610b10565b604051610374919061158c565b60405180910390f35b61039760048036038101906103929190611531565b610b87565b6040516103a4919061158c565b60405180910390f35b6103c760048036038101906103c291906117ec565b610baa565b6040516103d491906115b6565b60405180910390f35b6103f760048036038101906103f2919061165b565b610c31565b005b6060600580546104089061185b565b80601f01602080910402602001604051908101604052809291908181526020018280546104349061185b565b80156104815780601f1061045657610100808354040283529160200191610481565b820191906000526020600020905b81548152906001019060200180831161046457829003601f168201915b5050505050905090565b600080610496610cb5565b90506104a3818585610cbd565b600191505092915050565b6000600454905090565b6000806104c3610cb5565b90506104d0858285610e88565b6104db858585610f14565b60019150509392505050565b60006012905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080610551610cb5565b90506105728185856105638589610baa565b61056d91906118bc565b610cbd565b600191505092915050565b61058561118f565b60005b82829050811015610625576000600260008585858181106105ac576105ab611912565b5b90506020020160208101906105c1919061165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061061d90611941565b915050610588565b505050565b60005b8484905081101561078c5784848281811061064b5761064a611912565b5b9050602002016020810190610660919061165b565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82285600080876040516106c394939291906119cf565b60405180910390a38484828181106106de576106dd611912565b5b90506020020160208101906106f3919061165b565b73ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161077191906115b6565b60405180910390a3808061078490611941565b91505061062d565b505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107e561118f565b6107ef600061120d565b565b60005b848490508110156109545784848281811061081257610811611912565b5b9050602002016020810190610827919061165b565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260008686600060405161088b9493929190611a14565b60405180910390a3600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585838181106108df576108de611912565b5b90506020020160208101906108f4919061165b565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161093991906115b6565b60405180910390a3808061094c90611941565b9150506107f4565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546109949061185b565b80601f01602080910402602001604051908101604052809291908181526020018280546109c09061185b565b8015610a0d5780601f106109e257610100808354040283529160200191610a0d565b820191906000526020600020905b8154815290600101906020018083116109f057829003601f168201915b5050505050905090565b610a1f61118f565b60005b82829050811015610abf57600160026000858585818110610a4657610a45611912565b5b9050602002016020810190610a5b919061165b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ab790611941565b915050610a22565b505050565b610acc61118f565b80600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610b1b610cb5565b90506000610b298286610baa565b905083811015610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6590611acb565b60405180910390fd5b610b7b8286868403610cbd565b60019250505092915050565b600080610b92610cb5565b9050610b9f818585610f14565b600191505092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c3961118f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090611b5d565b60405180910390fd5b610cb28161120d565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2490611bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490611c81565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e7b91906115b6565b60405180910390a3505050565b6000610e948484610baa565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f0e5781811015610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790611ced565b60405180910390fd5b610f0d8484848403610cbd565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90611d7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90611e11565b60405180910390fd5b610fff8383836112d1565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90611ea3565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161117691906115b6565b60405180910390a36111898484846112d6565b50505050565b611197610cb5565b73ffffffffffffffffffffffffffffffffffffffff166111b561095c565b73ffffffffffffffffffffffffffffffffffffffff161461120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120290611f0f565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113775750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156113d35760011515600760009054906101000a900460ff161515146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c990611f55565b60405180910390fd5b5b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156114125780820151818401526020810190506113f7565b83811115611421576000848401525b50505050565b6000601f19601f8301169050919050565b6000611443826113d8565b61144d81856113e3565b935061145d8185602086016113f4565b61146681611427565b840191505092915050565b6000602082019050818103600083015261148b8184611438565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c88261149d565b9050919050565b6114d8816114bd565b81146114e357600080fd5b50565b6000813590506114f5816114cf565b92915050565b6000819050919050565b61150e816114fb565b811461151957600080fd5b50565b60008135905061152b81611505565b92915050565b6000806040838503121561154857611547611493565b5b6000611556858286016114e6565b92505060206115678582860161151c565b9150509250929050565b60008115159050919050565b61158681611571565b82525050565b60006020820190506115a1600083018461157d565b92915050565b6115b0816114fb565b82525050565b60006020820190506115cb60008301846115a7565b92915050565b6000806000606084860312156115ea576115e9611493565b5b60006115f8868287016114e6565b9350506020611609868287016114e6565b925050604061161a8682870161151c565b9150509250925092565b600060ff82169050919050565b61163a81611624565b82525050565b60006020820190506116556000830184611631565b92915050565b60006020828403121561167157611670611493565b5b600061167f848285016114e6565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126116ad576116ac611688565b5b8235905067ffffffffffffffff8111156116ca576116c961168d565b5b6020830191508360208202830111156116e6576116e5611692565b5b9250929050565b6000806020838503121561170457611703611493565b5b600083013567ffffffffffffffff81111561172257611721611498565b5b61172e85828601611697565b92509250509250929050565b60008060008060006080868803121561175657611755611493565b5b6000611764888289016114e6565b955050602086013567ffffffffffffffff81111561178557611784611498565b5b61179188828901611697565b945094505060406117a48882890161151c565b92505060606117b58882890161151c565b9150509295509295909350565b6117cb816114bd565b82525050565b60006020820190506117e660008301846117c2565b92915050565b6000806040838503121561180357611802611493565b5b6000611811858286016114e6565b9250506020611822858286016114e6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061187357607f821691505b602082108114156118875761188661182c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118c7826114fb565b91506118d2836114fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156119075761190661188d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061194c826114fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561197f5761197e61188d565b5b600182019050919050565b6000819050919050565b6000819050919050565b60006119b96119b46119af8461198a565b611994565b6114fb565b9050919050565b6119c98161199e565b82525050565b60006080820190506119e460008301876115a7565b6119f160208301866119c0565b6119fe60408301856119c0565b611a0b60608301846115a7565b95945050505050565b6000608082019050611a2960008301876119c0565b611a3660208301866115a7565b611a4360408301856115a7565b611a5060608301846119c0565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ab56025836113e3565b9150611ac082611a59565b604082019050919050565b60006020820190508181036000830152611ae481611aa8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611b476026836113e3565b9150611b5282611aeb565b604082019050919050565b60006020820190508181036000830152611b7681611b3a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611bd96024836113e3565b9150611be482611b7d565b604082019050919050565b60006020820190508181036000830152611c0881611bcc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c6b6022836113e3565b9150611c7682611c0f565b604082019050919050565b60006020820190508181036000830152611c9a81611c5e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611cd7601d836113e3565b9150611ce282611ca1565b602082019050919050565b60006020820190508181036000830152611d0681611cca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d696025836113e3565b9150611d7482611d0d565b604082019050919050565b60006020820190508181036000830152611d9881611d5c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611dfb6023836113e3565b9150611e0682611d9f565b604082019050919050565b60006020820190508181036000830152611e2a81611dee565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e8d6026836113e3565b9150611e9882611e31565b604082019050919050565b60006020820190508181036000830152611ebc81611e80565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ef96020836113e3565b9150611f0482611ec3565b602082019050919050565b60006020820190508181036000830152611f2881611eec565b9050919050565b50565b6000611f3f6000836113e3565b9150611f4a82611f2f565b600082019050919050565b60006020820190508181036000830152611f6e81611f32565b905091905056fea2646970667358221220550aaf74d630e059d35d1b52ae3741e9cb68b471e0dc4cd83b44ce4e313e961564736f6c634300080c0033